核心机能
示例配置
user www www; worker_processes 2; error_log /var/log/nginx-error.log info; events { use kqueue; worker_connections 2048; } ...
指令
语法: | accept_mutex |
默认值: | accept_mutex on; |
上下文: | events |
如果使用,nginx的多个工作进程将以串行方式接入新连接。否则,新连接将通报给所有工作进程,而且如果新连接数量较少,某些工作进程可能只是在浪费系统资源。
必须开启accept_mutex
才能使用rtsig连接处理方式。
语法: | accept_mutex_delay |
默认值: | accept_mutex_delay 500ms; |
上下文: | events |
使用时,可以指定某个工作进程检测到其它工作进程正在接入新连接时,自身等待直到重新开始尝试接入新连接的最大时间间隔。
语法: | daemon |
默认值: | daemon on; |
上下文: | main |
决定nginx是否应以守护进程的方式工作。主要用于开发。
语法: | debug_connection |
默认值: | — |
上下文: | events |
开启针对特定客户端连接的调试日志。除开这些连接,其它连接将使用指令设置的日志级别。 被调试的连接可以使用IPv4或IPv6(1.3.0, 1.2.1)网络地址来指定, 也可以使用主机名来设置连接。 对于UNIX域套接字(1.3.0, 1.2.1),使用“unix:
”参数来启用调试日志。
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
,上述指令才可以工作。
语法: | debug_points |
默认值: | — |
上下文: | main |
这条指令用于调试。
当nginx检测到内部错误,比如重启工作进程时出现套接字泄漏,开启debug_points
将导致创建core文件(abort
), 或者停止进程(stop
)以便使用系统调试器进行进一步分析。
语法: | error_log |
默认值: | error_log logs/error.log error; |
上下文: | main , http , server , location |
配置日志。
第一个参数定义了存放日志的文件。 如果设置为特殊值stderr
,nginx会将日志输出到标准错误输出。
第二个参数定义日志级别。 日志级别在上面已经按严重性由轻到重的顺序列出。 设置为某个日志级别将会使指定级别和更高级别的日志都被记录下来。 比如,默认级别error
会使nginx记录所有error
、crit
、alert
和emerg
级别的消息。 如果省略这个参数,nginx会使用error
。
为了使debug
日志工作,需要添加--with-debug
编译选项。
语法: | env |
默认值: | env TZ; |
上下文: | main |
nginx默认会删除从父进程继承的除TZ变量以外的所有环境变量。 这条指令允许nginx保留某些继承的环境变量,改变它们的值,或者创建新的环境变量。 这些变量将:
- 在热升级nginx执行文件时被继承;
- 被ngx_http_perl_module模块使用;
- 被工作进程使用。 请大家牢记于心,使用这种方法控制系统库不总是可行的,因为在这条指令设置环境变量以前,系统库初始化时就已检查这些环境变量的情况也并非少见。 但有一个例外,就是上面提到的热升级nginx执行文件。
TZ变量总是被继承,并且可被ngx_http_perl_module模块使用, 除非明确配置不允许这样。
使用示例:
env MALLOC_OPTIONS; env PERL5LIB=/data/site/modules; env OPENSSL_ALLOW_PROXY_CERTS=1;
NGINX环境变量是由nginx内部设置和使用,用户不应直接设置它。
语法: | events { ... } |
默认值: | — |
上下文: | main |
提供配置上下文,以解析那些影响连接处理的指令。
语法: | include |
默认值: | — |
上下文: | 任意 |
将另一个file
,或者匹配指定mask
的文件,包含到配置中。 被包含的文件应由语法正确的指令和块组成。
使用示例:
include mime.types; include vhosts/*.conf;
语法: | lock_file |
默认值: | lock_file logs/nginx.lock; |
上下文: | main |
nginx使用锁机制来实现,并将访问串行化到共享内存。 绝大多数系统中,锁是由原子操作实现,那么可以忽略这条指令。 另外一些系统使用“锁文件”的机制,那么这条指令将指定锁文件的前缀。
语法: | master_process |
默认值: | master_process on; |
上下文: | main |
决定是否启动工作进程。这条指令是为nginx开发者设计的。
语法: | multi_accept |
默认值: | multi_accept off; |
上下文: | events |
关闭时,工作进程一次只会接入一个新连接。否则,工作进程一次会将所有新连接全部接入。
使用kqueue连接处理方式时,可忽略这条指令,因为kqueue可以报告有多少新连接等待接入。
使用rtsig连接处理方式将自动开启multi_accept
。
语法: | pcre_jit |
默认值: | pcre_jit off; |
上下文: | main |
这个指令出现在版本 1.1.12.
开启或禁止在配置解析阶段为正则表达式使用“即时编译”(PCRE JIT)技术。
PCRE JIT可以显著提升处理正则表达式的速度。
从PCRE 8.20版本开始,可用PCRE的--enable-jit
编译选项打开JIT功能。 当使用PCRE源码库编译nginx时(--with-pcre=
), 应该使用nginx的--with-pcre-jit
编译选项开启JIT支持。
语法: | pid |
默认值: | pid nginx.pid; |
上下文: | main |
定义存储nginx主进程ID的file
。
语法: | ssl_engine |
默认值: | — |
上下文: | main |
定义SSL硬件加速器的名字。
语法: | timer_resolution |
默认值: | — |
上下文: | main |
在工作进程中降低定时器的精度,因此可以减少产生gettimeofday()
系统调用的次数。 默认情况下,每收到一个内核事件,nginx都会调用gettimeofday()
。 使用此指令后,nginx仅在每经过指定的interval
时间间隔后调用一次gettimeofday()
。
Example:
timer_resolution 100ms;
时间间隔的内部实现取决于使用的方法:
- 使用
kqueue
时,会使用EVFILT_TIMER
过滤器; - 使用
eventport
时,会使用timer_create()
; - 否则会使用
setitimer()
。
语法: | use |
默认值: | — |
上下文: | events |
指定使用的连接处理method(方式)
。 通常不需要明确设置,因为nginx默认会使用最高效的方法。
语法: | user |
默认值: | user nobody nobody; |
上下文: | main |
定义工作进程使用的user
和group
身份。 如果省略group
,nginx会使用与user
相同的组名。
语法: | worker_aio_requests |
默认值: | worker_aio_requests 32; |
上下文: | events |
这个指令出现在版本 1.1.4 和 1.0.7.
在使用epoll连接处理方式的情况下使用aio时, 可以设置单个工作进程未处理的异步I/O操作的最大number(数量)
。
语法: | worker_connections |
默认值: | worker_connections 512; |
上下文: | events |
设置每个工作进程可以打开的最大并发连接数。
需要记住,这个数量包含所有连接(比如,和后端服务器建立的连接,还有其他的), 而不仅仅是和客户端的连接。 另外需要考虑的是,实际的并发连接数是不能超过打开文件的最大数量限制的,这个限制可以用指令修改。
语法: | worker_cpu_affinity |
默认值: | — |
上下文: | main |
绑定工作进程到指定的CPU集合。每个CPU集合使用一个标记允许使用的CPU的位图来表示。 需要为每个工作进程分别设置CPU集合。 工作进程默认不会绑定到任何特定的CPU。
比如
worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000;
将每个工作进程分别绑定至不同的CPU,而
worker_processes 2; worker_cpu_affinity 0101 1010;
将第一个工作进程绑定至CPU0/CPU2,将第二个工作进程绑定至CPU1/CPU3。 上面第二个例子适合于超线程的机器。
这条指令仅在FreeFSD和Linux系统有效。
语法: | worker_priority |
默认值: | worker_priority 0; |
上下文: | main |
定义工作进程的调度优先级。这与nice
命令行所做的相同: number
为负数代表优先级更高。通常允许的范围是[-20, 20]。
举例:
worker_priority -10;
语法: | worker_processes |
默认值: | worker_processes 1; |
上下文: | main |
定义工作进程的数量。
关于这个值的优化依赖很多因素,其中包括(但不限于)CPU的核数,存储数据的硬盘数量和负载模式。 如果感觉到迷惑,将它设置为等于可用的CPU核数是一个不错的开始(值为“auto
”时,nginx会自动检测它)。
auto
参数从版本1.3.8和1.2.5开始支持。
语法: | worker_rlimit_core |
默认值: | — |
上下文: | main |
修改工作进程的core文件尺寸的最大值限制(RLIMIT_CORE
),用于在不重启主进程的情况下增大该限制。
语法: | worker_rlimit_nofile |
默认值: | — |
上下文: | main |
修改工作进程的打开文件数的最大值限制(RLIMIT_NOFILE
),用于在不重启主进程的情况下增大该限制。
语法: | worker_rlimit_sigpending |
默认值: | — |
上下文: | main |
在支持rtsig连接处理方式的系统中,修改工作进程的信号队列长度限制(RLIMIT_SIGPENDING
),用于在不重启主进程的情况下增大该限制。
语法: | working_directory |
默认值: | — |
上下文: | main |
定义工作进程的当前工作路径。 主要用于设置core文件的目标地址。工作进程应当具有指定路径的写权限。
翻译: cfsego |