Nginx配置文件参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx配置文件参数相关的知识,希望对你有一定的参考价值。

具体配置项介绍:

主语句块配置:
Main 全局配置段常见的配置指令分类
正常运行必备的配置
优化性能相关的配置
用于调试及定位问题相关的配置
事件驱动相关的配置

相关配置:
1 user [username groupname]:以哪个用户的身份运行
2 pid /path/to/pidfile_name:指定nginx的pid文件
注意:
1 进程结束pid文件自动删除
2 所在路径应该对所有者开放写权限
3 include file | mask  
指明包含进来的其它配置文件片断
4 load_module file:模块加载
模块加载配置文件:/usr/share/nginx/modules/*.conf  
指明要装载的动态模块路径: /usr/lib64/nginx/modules

性能优化相关配置:

1 worker_processes [n]:work进程的个数 
注意:设置在主配置段
通常其数值为cpu的物理核心数减1[非固定]
auto --自动根据电脑cpu数量生成
具体设置:
[[email protected]:15:31nginx]#ps aux | grep nginx
root       1328  0.0  0.4 120796  2236 ?        Ss   19:15   0:00 nginx: master process /usr/sbin/nginx
nginx      1329  0.0  0.6 121180  3120 ?        S    19:15   0:00 nginx: worker process
nginx      1330  0.0  0.6 121180  3120 ?        S    19:15   0:00 nginx: worker process
nginx      1331  0.0  0.6 121180  3120 ?        S    19:15   0:00 nginx: worker process

2 worker_cpu_affinity [cpumask]:把进程绑定到固定cpu
 0000:一颗都不用
 0001:第0颗cpu
 0010:第一颗cpu
 0100:第二颗cpu
 1000:第三颗cpu
 0011:使用第0颗和第一颗cpu
具体用法:设置在主配置段
worker_cpu_affinity 0001 0010 0100 1000;
只能保证这几个进程各自再一个cpu上运行,并不能保证
cpu上不能运行其他进程

ps axo psr,pid,cmd --查看cpu绑定情况
具体设置:
worker_cpu_affinity 0001 0010 0100;
效果:
[[email protected]:18:22~]#ps axo pid,cmd,psr | grep nginx
  1328 nginx: master process /usr/   2
  1374 nginx: worker process         0
  1375 nginx: worker process         1
  1376 nginx: worker process         2

3 worker_priority [nice值]:nice值越小越优先调用
 -20---19之间的值
指定worker进程的nice值,在主配置段设置!
初始nice值都是0:
[[email protected]:19:42~]#ps axo pid,cmd,psr,ni | grep nginx
  1328 nginx: master process /usr/   2   0
  1374 nginx: worker process         0   0
  1375 nginx: worker process         1   0
  1376 nginx: worker process         2   0
设置nice值:
worker_priority 10;
效果:
[[email protected]:24:21~]#ps axo pid,cmd,psr,ni | grep nginx
  1328 nginx: master process /usr/   3   0
  1420 nginx: worker process         0  10
  1421 nginx: worker process         1  10
  1422 nginx: worker process         2  10

4 worker_rlimit_nofile [n]:
指定一个worker进程所能够打开的最大文件数
设置在主配置段
每响应一个用户请求,都会相应的打开一个socket文件
具体设置:
worker_rlimit_nofile 10240;
测试:
ab -c 1025 -n 4000 http://172.20.23.48/
这时候是不能成功测试的!
因为打开文件的数量还取决于,系统上默认的设置可以使用:
ulimit -a来查看:open files (-n) 1024
更改配置文件:/etc/security/limits.conf
<domain>        <type>  <item>  <value>
Apache          hard     nofile   3000
nginx           hard     nofile   4000

配合ulimit -n [n]:n=限制打开的文件数量

5 ssl_engine device:
再存在ssl硬件加速器的服务器上,
指定所使用的ssl硬件加速设备

6 timer_resolution [n]: 
每隔多少时间返回一次-每次内核事件调用,返回时都会使用gettimeofday()这个系统
调用来获取系统时间,来更新nginx缓存时钟!
现在x86_64系统上,gettimeofday的代价已经很小,不设置也没问题

事件驱动相关配置:

1 use [epoll|rtsig|select|poll];
定义使用的事件模型,建议让nginx自动选择 ,linux中一般是epoll

2 worker_connections [n];
每个worker能够并发响应的最大请求数
如果是web服务器:这数值要略小于worker_rlimit_nofile [n]
如果是代理服务器,worker_rlimit_nofile [n]应该是这个数值的2倍
和ulimit -a限制的打开文件数有关!

3 accept_mutex [on|off]:
是否打开nginx的负载均衡锁,此锁能够让多个worker进程
轮流的,序列化的与新的客户端建立TCP连接,而通常当一个worker
进程的负载达到其上限的7/8时,maseter就尽可能不在将请求调度此worker
on--轮流处理请求
off--会通知所有进程,但最终只有一个进程响应,造成"惊群现象"影响性能

4 multi_accept {on|off};
是否允许一次性地响应多个用户请求,默认为off

5 accept_mutex_delay [n]毫秒;
accept锁模式中,一个worker进程为取得accept锁的
等待时长,[如果某worker进程在某次试图取锁失败后只有等待n毫秒后才能再次锁]
默认是500毫秒

调试|测试相关配置:

1 daemon [on|off];
是否让nginx运行于后台默认为on,调试时可以设置为off,使得所有信息直接输出于
控制台!设置于主配置段!制作docker镜像时,需要设置为off

2 master_process[on|off];
是否以一个master管理多个进程的方式运行,默认是on
为了调试追踪,可以设置off,就不会在有worker进程

3 error_log /path/to/error_log level[级别];
错误日志文件及其级别,调试时可以使用debug级别,但要求编译时 --with-debug启用
debug功能!
默认为error级别
编译安装时需要--with-debug能支持debug级别

方式:file /path/logfile;  
stderr:发送到标准错误  
syslog:server-address[,parameter=values]:发送到
syslog memory:size 内存  
级别:
level:debug|info|notice|warn|error|crit|alter|emerg

网络相关配置:

1 keepalive_timeout [time];
 设置保持连接的超时时间
   默认为75秒
   0表示禁用
   http|server|location
使用telnet测试:
[[email protected]:47:59nginx]#telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is ‘^]‘.
GET / HTTP/1.1                          
HOST: 172.20.23.48
HTTP/1.1 200 OK

2 keepalive_requests n;在一次长连接上允许承载的最大请求数;
具体使用:
keepalive_timeout   75;
keepalive_requests  2; 

3 keepalive_disables [msie6|safari|none]
对指定的浏览器禁止使用长连接

4 tcp_nodelay on|off:
    确认延迟,默认是on, 

5 client_header_timeout time[秒]
    读取http请求首部的超时时长

6 client_body_timeout time;
    读取http请求包体的超时时长 ,默认60秒

7 send_timeout time;
    发送响应的超时时长

8 client_body_buffer_size size;  
    用于接收每个客户端请求报文的body部分的缓冲区大小;
    默认为16k;超出此大小时其将被暂存到磁盘上的由下面client_body_temp_path指令所定义的位置

9 client_body_temp_path path [level1 [level2 [level3]]];        
    设定存储客户端请求报文的body部分的临时存储路径及子目录结构和数量  
    目录名为16进制的数字client_body_temp_path  /var/tmp/client_body  1 2 2  
    1 1级目录占1位16进制,即2^4=16个目录 0-f  
    2 2级目录占2位16进制,即2^8=256个目录 00-ff  
    2 3级目录占2位16进制,即2^8=256个目录 00-ff 

客户端请求的限制:

1 limit_except 方法:限定指定范围之外的方法访问控制[只能用于location]
 例子:
    limit_except GET {
            allow 172.16.0.0/16;              
            deny all;
            }
除了GET以外的方法只允许172.16.0.0/16网络中的用户使用!
用户常用请求方法:
GET -请求获取一个资源
HEAD-根GET相似,但其不需要服务器发送资源而仅传回响应首部
POST -提交表单,支持html表单提交
PUT -向服务器写入文档
DELETE -请求删除URL指向的资源
OPTIONS -探测服务器端对某资源所支持的请求方法
具体使用:
server {
    server_name www.a.com;
    listen 80;
    root /web/a.com;
    index index.html;
    server_tokens off;

    location /test {
        root /www/html;
            limit_except PUT {
                    deny 172.20.23.33;
                    deny 172.20.23.23;
                    allow all;
            }
    }

    location /test1 {
        alias /mydata/html;
    }

}
这样设置意味着除了PUT以外的方法对172.20.23.33主
机禁止使用
测试:
[[email protected]:16:01~]#curl -XGET http://www.a.com/test/ 
<html>
<head><title>403 Forbidden</title></head>

2 client_max_body_size size;
  http请求包体的最大值; 限制用户上传文件的大小
 根据请求首部中的Content-Length来检测,以避免无用的传输

3 limit_rate 值 单位是bytes/second;
   限制客户端每秒钟传输的字节数
   默认为0表示没有限制; 
   http|server|location

4 limit_rate_after time;
  nginx向客户发送响应报文时,如果时长超出了此处指定的时长,则后续的发送过程开始限速
  多用于下载服务器!

文件操作优化相关:

1 sendfile on|off
是否启用sendfile功能,高效传输文件模式

sendfile: 设置为on表示启动高效传输文件的模式。
sendfile可以让Nginx在传输文件时直接在磁盘和tcp socket之间传输数据。
如果这个参数不开启,会先在用户空间(Nginx进程空间)申请一个buffer,
用read函数把数据从磁盘读到cache,再从cache读取到用户空间的buffer,
再用write函数把数据从用户空间的buffer写入到内核的buffer,
最后到tcp socket。开启这个参数后可以让数据不用经过用户buffer。

2 aio on|off
是否启用aio,一般要启用!启用异步文件

3 open_file_cache max=N [inactive=time] on|off
max=N:缓存条目的最大值
inactive=time:非活动时间,某缓存条目在指定时长时没有被访问过时,将自动删除
默认60秒
是否打开文件缓存功能,当满了以后将根据LRU算法进行置换
缓存的信息包括:
文件的描述符,文件大小,上次修改时间
已经打开的目录结构
没有找到或没有访问权限的信息

4 open_file_cache_errors on|off
是否缓存文件找不到或者没有权限访问等相关信息
可能会影响更新-默认是off

5 open_file_cache_valid time;
多长时间检查一次缓存中的条目是否超出非活动时间的 默认60秒

6 open_file_cache_min_use n;
在inactive指定的时长内被访问超出此处指定的次数时,不会被删除

7 directio size | off;  
当文件大于等于给定大小时,例如directio 4m,同步(直接)写磁盘,而非写缓存

对客户端请求的特殊处理:

 1 ignore_invalid_headers on|off
   是否忽略不合法的http首部,默认值是on,off意味着请求首部中出现不合规的首部将
   拒绝响应

 2 log_not_found on|off
    是否将文件找不到的信息也记录到错误日志中!

 3 resolver address;
       指定nginx使用的dns服务器地址

 4 resolver_timeout time;
       指定DNS解析超时时长,默认30s

 5 server_tokens [on|off];
    是否在错误页面中显示nginx的版本号;一般off

以上是关于Nginx配置文件参数的主要内容,如果未能解决你的问题,请参考以下文章

Nginx——Nginx启动报错Job for nginx.service failed because the control process exited with error code(代码片段

如何用nginx.conf配置nginx

Nginx 跨域

linux学习:Nginx--常见功能配置片段与优化-06

Nginx 入门实战--Nginx 常用配置参数说明

Nginx的配置