Nginx core 参数配置说明

文档来自 http://nginx.org/en/docs/ngx_core_module.html

Nginx核心功能介绍

先来一个配置示例:

user www www;
worker_processes 2;

error_log /var/log/nginx-error.log info;

events {
    use kqueue;
    worker_connections 2048;
}

...

指令

daemon

Syntax:     daemon on | off;
Default:    

daemon on;

Context:    main

指示Nginx是否需要成为守护进程,一般用于开发期间。

debug_points

Syntax:     debug_points abort | stop;
Default:    —
Context:    main

这个指令用于调试。
当出现内部错误时,如在重启worker时socket泄漏,设置了 debug_points 会产生 core 文件或停止process,以便调试系统收集更多的信息来分析。

error_log

Syntax:     error_log file [level];
Default:    

error_log logs/error.log error;

Context:    main, http, mail, stream, server, location

配置Nginx的日志,同等级日志可以有多条日志配置。如果 main 级别的配置没有明确定义,也即没有定义日志文件,那么Nginx将使用默认的文件来输出日志。

第一个参数 file 定义了存放日志文件的路径,如果是 stderr ,则日志直接输出到系统标准输入输出上,如果需要将日志传输到另外的日志服务器上,可配置 syslog,以 syslog: 为前缀,如 syslog:server=address[,parameter=value],还可以设置参数 memory来将日志记录到 cyclic memory buffer 中。

示例:
error_log syslog:server=192.168.1.1 debug;

access_log syslog:server=unix:/var/log/nginx.sock,nohostname;
access_log syslog:server=[2001:db8::1]:12345,facility=local7,tag=nginx,severity=info combined;

第二个可选参数 level ,设置日志的等级,可使用的值有:
debug, info, notice, warn, error, crit, alert, emerg. 上述等级严重性也顺序递增。
设置其中一个等级,日志中出现的内容包括本等级及等级后边的日志等级,例如:如果设置日志等级为 error ,则所有的的 errorcritalert 以及 emerg 等级的日志也会出现。
配置为 debug 等级,必须在编译时使用了 --with-debug 参数。

env

Syntax:     env variable[=value];
Default:    

env TZ;

Context:    main

Nginx默认会移除继承自父进程的所有变量(TZ变量除外),env 指令允许从父进程继承变量、更改变量、创建新变量。这些变量包括:

  • 继承自在线升级的二进制文件
  • ngx_http_perl_module 模块使用的变量
  • worker 进程中使用的变量,我们须知道,这种方式控制系统库不总是有效的,因为系统库通常只在初始化的时候检查变量,之前他们可以使用这个指令,有一个例外的情况,就是上面提到的在线升级的文件

TZ变量总是被继承的,来自 ngx_http_perl_module 模块,除非有对它有显式的配置。
示例

env MALLOC_OPTIONS;
env PERL5LIB=/data/site/modules;
env OPENSSL_ALLOW_PROXY_CERTS=1;

events

Syntax:     events { ... }
Default:    —
Context:    main

设置event的一些参数配置。

Syntax:     accept_mutex on | off;
Default:    

accept_mutex off;

Context:    events

accept_mutex

如果设置允许 accept_mutex ,则 worker 会轮流的也即串行的方式接受新连接。其中一个worker被唤醒来处理新来的连接,其他的worker保持不动;如果不允许 accept_mutex,Nginx会通知所有的worker,唤醒他们【惊群问题】,以便让其中一个worker来接受处理新来的连接,Nginx默认禁用该功能(一个保守的设置,预防惊群问题)。
1.11.3版本之前,该功能默认是开启的。

accept_mutex_delay

Syntax:     accept_mutex_delay time;
Default:    

accept_mutex_delay 500ms;

Context:    events

跟上面的 accept_mutex 搭配设置的,如果启用了 accept_mutex,这个参数是设置每个worker在别的worker试图接受处理新连接后,必须要等待的最大时间,是一种锁机制,保护避免惊群现象,防止所有worker都呼啦一下子来获取这个新连接。默认为500ms,0.5s。

debug_connection

Syntax:     debug_connection address | CIDR | unix:;
Default:    —
Context:    events

允许指定的客户端IP调试日志,其他IP使用 error_log 指令设置的级别来输出日志。调试日志IP使用IPV4或网段,也可以指定主机名,unix socket等。

示例:

events {
debug_connection 127.0.0.1;
debug_connection localhost;
debug_connection 192.0.2.0/24;
debug_connection ::1;
debug_connection 2001:0db8::/32;
debug_connection unix:;
...
}
要正常使用该功能,必须在编译时使用 --with-debug 参数。

worker_aio_requests

Syntax:     worker_aio_requests number;
Default:    

worker_aio_requests 32;

Context:    event

This directive appeared in versions 1.1.4 and 1.0.7. 

仅出现在V1.1.4和V1.0.7上。
当在 epoll 上 使用 aio 时,设置单个 worker 进程未处理的异步IO数量。

worker_connections

Syntax:     worker_connections number;
Default:    

worker_connections 512;

Context:    event

设置单个worker进程能同时打开的最大连接数。
切记,这个数值包含所有的连接(包括跟后端server间的连接,不仅仅是跟客户端间的连接),另外要注意的是,这个数值不能大于单个worker进程能打开的最大文件数限制(这个值可由 worker_rlimit_nofile 指令设置)。

use

Syntax:     use method;
Default:    —
Context:    events

设定使用什么类型的事件处理类型,可选值有如下:

  • select,标准方法,各平台默认自动编译支持,如果没有更有效的方法是,使用该方法。--with-select_module--without-select_module 这2个编译参数可以强制设定是否使用 select 或不使用 select.
  • poll ,标准方法,各平台默认自动编译支持,如果没有更有效的方法是,使用该方法。--with-poll_module--without-poll_module 这2个编译参数可以强制设定是否使用 select 或不使用 select.
  • kqueue ,在FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0, 和 macOS 等系统上更高效的方法。
  • epoll ,在Linux 2.6+ 上更高效的方法。
  • /dev/poll , Solaris 7 11/99+, HP/UX 11.22+ , IRIX 6.5.15+, 和 Tru64 UNIX 5.1A+ 系统上更高效的方法。
  • eventport ,Solaris 10 系统上更高效的方法。

multi_accept

Syntax:     multi_accept on | off;
Default:    

multi_accept off;

Context:    events

设置了 multi_accept off 后,worker进程一次只能处理一个连接,设置为on的时候,worker 进程一次可以接受所有连接。

include

Syntax:     include file | mask;
Default:    —
Context:    any

这个指令配置嵌套的配置文件,即走Nginx.conf里再包含一个其他的配置文件,可放在配置文件的任何位置。
示例

include mime.types;
include vhosts/*.conf;

load_module

Syntax:     load_module file;
Default:    —
Context:    main

This directive appeared in version 1.9.11. 

加载一个模块。
示例

load_module modules/ngx_mail_module.so;

lock_file

Syntax:     lock_file file;
Default:    

lock_file logs/nginx.lock;

Context:    main

Nginx使用锁机制来实现 accept_mutex 以及序列化访问来实现共享内存,大多数系统使用原子操作来实现锁,那么这个指令将会被忽略,其他一些系统使用 lock file来实现锁,这个指令设置锁的名称和路径前缀。

master_process

Syntax:     master_process on | off;
Default:    

master_process on;

Context:    main

这是一个给Nginx开发者使用的指令,标识worker进程是否已启动。

pcre_jit

Syntax:     pcre_jit on | off;
Default:    

pcre_jit off;

Context:    main

This directive appeared in version 1.1.12. 

设置是否允许 JIT 编译的开关,启用 JIT 能极大的提高正则表达式处理的速度。

pid

Syntax:     pid file;
Default:    

pid nginx.pid;

Context:    main

设置 pid 存放到哪个文件里。

ssl_engine

Syntax:     ssl_engine device;
Default:    —
Context:    main

定义硬件SSL加速器的名称。

thread_pool

Syntax:     thread_pool name threads=number [max_queue=number];
Default:    

thread_pool default threads=32 max_queue=65536;

Context:    main

This directive appeared in version 1.7.11. 

定义一个线程池的名称,用来非阻塞的使用多线程读取或发送文件。
threads 参数是线程池大小的数值,如果线程池中的所有线程均处于忙碌状态,新任务将会在队列里等候,max_queue 设置了队列里可等待的最大值,默认为 65536 ,如果队列溢出了,新任务将以错误结束。

timer_resolution

Syntax:     timer_resolution interval;
Default:    —
Context:    main

worker进程中的减时计时器,因此会调用 gettimeofday() ,默认情况下,每收到一次内核事件将会调用一次 gettimeofday() ,使用减时方案,gettimeofday()只会在设定的时间间隔内调用一次。如:

timer_resolution 100ms;

内部时间的时间间隔取决于使用如下哪个方法:

  • 如果使用kqueue,则值为 EVFILT_TIMER
  • 如果使用eventport,则值为 timer_create()
  • 其他情况为 setitimer()

user

Syntax:     user user [group];
Default:    

user nobody nobody;

Context:    main

定义Nginx运行时的用户和组,如果组没有指定,则用户和组一致。

worker_cpu_affinity

Syntax:     worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask];
Default:    —
Context:    main

设置CPU亲和性,每个CPU使用位掩码来描述其亲和性,需要单独设置每个worker,默认情况下,worker进程不绑定任何CPU。
示例:

worker_processes    4;
worker_cpu_affinity 0001 0010 0100 1000;  //4个worker,所以要对每个worker都进行设置。

又如示例

worker_processes    2;
worker_cpu_affinity 0101 1010;

这里将第一个worker绑定到CPU0和CPU2上,将worker 2绑定到CPU1和CPU3上。这个例子适合超线程。
也可以设置auto值,让系统自动的绑定CPU到具体的worker上。如:

worker_processes auto;
worker_cpu_affinity auto;

也可用掩码来设定自动绑定到哪些CPU上,即有些CPU不用于Nginx。如:

worker_cpu_affinity auto 01010101;//8个CPU,只有CPU0,CPU2,CPU4,CPU6这几颗CPU参与自动绑定。

这个指令仅用于Linux和FreeBSD。

worker_priority

Syntax:     worker_priority number;
Default:    

worker_priority 0;

Context:    main

定义 Nginx 的 worker 进程的优先级,就像 nice 命令一样:负值意味着更高的优先级,可选范围是 -20 到 20。

worker_processes

Syntax:     worker_processes number | auto;
Default:    

worker_processes 1;

Context:    main

定义Nginx的worker进程的数量。
最佳值取决于很多因素,包括(但不限于)CPU的核数、硬盘分区的数量、负载模式。如果不知怎么设置好,将该值设置为CPU的数量不失一个不错的选择(设置了 auto 的话,Nginx将会自动侦探CPU的核数)

worker_rlimit_core

Syntax:     worker_rlimit_core size;
Default:    —
Context:    main

设置每个worker最大能打开的核心文件数,用于突破上限而不用重启master进程。
core文件中Nginx发生crash的时候会产生的文件。一般用于调试,gdb等。

worker_rlimit_core 50M;
working_directory /tmp/;

worker_rlimit_nofile

Syntax:     worker_rlimit_nofile number;
Default:    —
Context:    main

设置每个worker最大能打开的核件数,用于突破上限而不用重启master进程。
这个值未设置的话,采用系统的值,ulimit -a,一般会把它调高点,以防报错 "too many open files" 的问题。

worker_rlimit_nofile 100000;

worker_shutdown_timeout

Syntax:     worker_shutdown_timeout time;
Default:    —
Context:    main

This directive appeared in version 1.11.11. 

配置Nginx能优雅的停止,如果超过时间还未停止,Nginx会关闭当前所有连接,来保证Nginx停止。

working_directory

Syntax:     working_directory directory;
Default:    —
Context:    main

设定Nginx的worker进程的工作目录,仅用于定义core文件的位置,该目录必须要让Nginx的运行时用户有写的权限,一般会配套的有 worker_rlimit_core 指令设置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 配置运行Nginx服务器用户(组) 用于配置运行Nginx服务器用户(组)的指令是user,其语法格式为: use...
    吃瓜的东阅读 4,489评论 0 41
  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,650评论 24 1,002
  • 1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单...
    rosekissyou阅读 10,206评论 5 124
  • 上一篇《WEB请求处理一:浏览器请求发起处理》,我们讲述了浏览器端请求发起过程,通过DNS域名解析服务器IP,并建...
    七寸知架构阅读 80,946评论 21 356
  • 人从生下来,就分为两类。 聪慧的,愚笨的。 我想,我可以做为例外。 因为我是那种自认为聪慧却愚笨的人。 原因只有一...
    安棉一阅读 311评论 0 0