tengine 和 Nginx 常见配置

nginx命令

查看nginx进程

ps aux|grep nginx

重启nginx

如果在上一步查看nginx的时候没有出现正在运行的进程,那里说明nginx

 

使用一下命令重启:若失败可以看到失败信息进行修改

/opt/taobao/nginx/bin/t-alipay-tengine -c /home/admin/fcprocess-run/tenginx-conf/t-alipay-tengine.conf

 

配置

nginx的配置主要分为了两个大部分,一部分对于nginx本身的运行参数配置,还有一个部分是对nginx模块的配置。

 

  • main部分就是对nginx的运行的一些参数配置
  • events,http,mail就是nginx里面的一些模块,其中server,location就是对http模块中的一些配置。

 

Nginx的全局配置

user  nobody nobody;
worker_processes  2;
error_log  logs/error.log  notice;
pid        logs/nginx.pid;
worker_rlimit_nofile 65535;
 
events{
     use epoll;
     worker_connections      65536;
}
  • user 指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行
  • worker_processes 指定了Nginx要开启的进程数,一般与CPU核数一致,减少进程进程竞争CPU资源
  • error_log 来定义全局错误日志文件, 日志存放的位置,以及日志的级别
  • pid 用来指定进程pid的存储文件位置
  • worker_rlimit_nofile 更改worker进程的最大打开文件数限制
  • 其他配置 TBD

events模块配置

events {
    worker_connections 2048;
    multi_accept on;
    use epoll;
}
  • worker_connections 一个进程最大可以打开的连接数
  • multi_accept  告诉nginx收到一个新连接通知后接受尽可能多的连接
  • use 设置使用何种IO多路复原的模块,主要使用epoll,在mac上可以使用kqueue

http模块配置

http模块是nginx控制http请求核心, 其中的配置内容很多

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
}
  • sendfile 让nginx在响应时直接发送数据,避免内核态和用户态的两次数据拷贝,IO零拷贝的一种。
  • tcp_nopush 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送
  • tcp_nodelay 告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。
access_log off;
error_log /var/log/nginx/error.log crit;

 

  • access_log 设置nginx是否将存储访问日志
  • error_log 告诉nginx只能记录严重的错误
keepalive_timeout 10;
client_header_timeout 10;
client_body_timeout 10;
reset_timedout_connection on;
send_timeout 10
  • keepalive_timeout 客户端keep-alive链接超时时间
  • client_header_timeout 和client_body_timeout 设置请求头和请求体的超时时间
  • reset_timeout_connection 关闭不响应的客户端连接
  • send_timeout 指定客户端的响应超时时间,在两次客户端读取操作这段时间如果超过配置时间,nginx则会关闭连接
limit_conn_zone $binary_remote_addr zone=addr:5m;
limit_conn addr 100;
  • limit_conn_zone  设置用于保存各种key(比如当前连接数)的共享内存的参数
  • limit_conn 为给定的key设置最大连接数, 这里key为100表示,允许每一个ip的最大连接数为100
include /etc/nginx/mime.types;
default_type text/html;
charset UTF-8;
  • include 添加另一个文件的指令
  • default_type 置文件使用的默认的MIME-type
  • charset 设置我们的头文件中的默认的字符集
gzip on;
gzip_disable "msie6";
# gzip_static on;
gzip_proxied any;
gzip_min_length 1000;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
  • gzip 是告诉nginx采用gzip压缩的形式发送数据,减少发送的数据量。
  • gzip_disable 为指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容。
  • gzip_static 告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。
  • gzip_proxied 允许或者禁止压缩基于请求和响应的响应流。
  • gzip_min_length 设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。
  • gzip_comp_level 设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。
  • gzip_type 设置需要压缩的数据格式。
open_file_cache max=100000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

 

  • open_file_cache 打开缓存的同时也指定了缓存最大数目,以及缓存的时间
  • open_file_cache_valid 在open_file_cache中指定检测正确信息的间隔时间
  • open_file_cache_min_uses 定义open_file_cache中指令参数不活动时间期间里最小的文件数。
  • open_file_cache_errors 指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。

 

server模块配置

 

当有多个域名对应同一个IP的时候,也就是有多个HTTP服务部署在同一台服务器上的时候,可以使用虚拟主机来区分服务,把不同的请求转发到相应的服务上去。

server {
        listen       8080;
        server_name  localhost 192.168.1.1 www.foo.com;
        root   /data/foo/www;
        index  index.html index.htm; 
        charset utf-8;
        access_log  usr/local/var/log/host.access.log  main;
        aerror_log  usr/local/var/log/host.error.log  error;
        ....
}
  • listen 用于指定虚拟主机的服务端口。
  • server_name 用来指定IP地址或者域名,多个域名之间用空格分开。
  • root 表示在这整个server虚拟主机内,全部的root web根目录。
  • index 全局定义访问的默认首页地址。
  • charset 用于设置网页的默认编码格式。
  • access_log 用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。

 

location模块

 

location就是匹配指定一些url访问指定的文件

 

  • 语法规则
location pattern {
        ...
    }
  • 其中pattern又分为多种
    • = 表示精确匹配
    • ^~ 表示uri以某个常规字符串开头,例如^~ /foo/,那么请求http://www.bar.com/foo/demo.png就会被该location匹配
    • ~ 表示区分大小写的正则匹配
    • ~* 表示不区分大小写的正则匹配
    • !~ 表示不匹配区分大小写的正则匹配
    • !~* 表示不匹配不区分大小写的正则匹配
    • / 表示通用匹配,任何请求都被该location匹配,但是优先级低
  • pattern具有优先级,当优先级高的location匹配了,则不会再匹配了,类似于责任链模式
    • 大于 ^~ 大于 配置中的顺序 大于 /
location / {
             proxy_pass  http://127.0.0.1:8080;   
        proxy_redirect off;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                     #即允许重新定义或添加字段传递给代理服务器的请求头。该值可以包含文本、变量和它们的组合
             #以下是一些反向代理的配置,可选。
             proxy_set_header Host $host;
             client_max_body_size 10m; #允许客户端请求的最大单文件字节数
             client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
             proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
             proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
             proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
             proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
             proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
             proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
             proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
        }

nginx 常见参数以及重定向参数配置

 

$arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。

$args #这个变量等于请求行中(GET请求)的参数,例如foo=123&bar=blahblah;

$binary_remote_addr #二进制的客户地址。

$body_bytes_sent #响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。

$content_length #请求头中的Content-length字段。

$content_type #请求头中的Content-Type字段。

$cookie_COOKIE #cookie COOKIE变量的值

$document_root #当前请求在root指令中指定的值。

$document_uri #与$uri相同。

$host #请求主机头字段,否则为服务器名称。

$hostname #Set to the machine’s hostname as returned by gethostname

$http_HEADER

$is_args #如果有$args参数,这个变量等于”?”,否则等于”",空值。

$http_user_agent #客户端agent信息

$http_cookie #客户端cookie信息

$limit_rate #这个变量可以限制连接速率。

$query_string #与$args相同。

$request_body_file #客户端请求主体信息的临时文件名。

$request_method #客户端请求的动作,通常为GET或POST。

$remote_addr #客户端的IP地址。

$remote_port #客户端的端口。

$remote_user #已经经过Auth Basic Module验证的用户名。

$request_completion #如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。

$request_method #GET或POST

$request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。

$request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。

$scheme #HTTP方法(如http,https)。

$server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。

$server_addr #服务器地址,在完成一次系统调用后可以确定这个值。

$server_name #服务器名称。

$server_port #请求到达服务器的端口号。

$uri #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。该值有可能和$request_uri 不一致。$request_uri是浏览器发过来的值。该值是rewrite后的值。例如做了internal redirects后。

 

upstream模块

 

upstream模块主要用于负载均衡,通过四层转发,也就是在传输层转发,提高服务的性能。使用upstream模块时只要指定一些列的后续服务,然后在server模块的location中指定需要被LB的请求URI。

upstream load_balance { 
    server 192.168.1.101:8081; 
    server 192.168.1.102:8082; 
    server 192.168.1.103:8083; 
    server 192.168.1.104:8084; 
}

server { 
        listen 80; 
        server_name proxy; 
        location / { 
                proxy_pass http://load_balance; 
        } 
}

upstream策略

 

默认情况下,upstream采用的是轮循策略,每个请求按时间逐一的转发到不同的服务器上,此外upstream模块还有不同的负载均衡策略

 

  • weight(权重策略)

 

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream locad_balance{
    server 192.168.1.101:8081 weight=5;
    server 192.168.1.102:8082 weight=10;
}

 

此时,192.168.1.102:8082的访问比率要比192.168.1.101:8081的访问比率高一倍。

 

  • ip_hash(ip绑定访问)

 

每个请求按访问ip的hash结果分配,这样每个客户端固定访问一个后端服务器。

upstream load_balance{
    ip_hash;
    server 192.168.1.101:8081;
    server 192.168.1.102:8082;
}
  • fair

 

按后端服务器的响应时间来分配请求,响应时间短的优先分配

upstream favresin{     
    fair;
    server 192.168.1.101:8081;
    server 192.168.1.102:8082;
}
  • url_hash

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。

upstream resinserver{
    hash $request_uri;
    hash_method crc32;
    server 192.168.1.101:8081;
    server 192.168.1.102:8082;
}

主机状态

upstream还可以为每一台代理的服务器添加一个状态,通过指定不同的状态来达到不同功能

 

  • down 表示单前的server暂时不参与负载
  • weight 默认为1.weight越大,负载的权重就越大
  • max_fails 允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
  • fail_timeout max_fails次失败后,暂停的时间
  • backup 其它所有的非backup机器down或者忙的时候,请求backup机器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值