核心功能
配置示例
user www www; worker_processes 2; error_log /var/log/nginx-error.log info; events { use kqueue; worker_connections 2048; } ...
指令
句法: |
accept_mutex |
---|---|
默认: |
accept_mutex off; |
语境: |
events |
如果accept_mutex
启用,工作进程将轮流接受新连接。否则,所有工作进程都会收到有关新连接的通知,并且如果新连接量较低,某些工作进程可能会浪费系统资源。
accept_mutex
在支持
EPOLLEXCLUSIVE标志 (1.11.3) 的系统上或使用reuseport时
无需启用。
在版本 1.11.3 之前,默认值为on
。
句法: |
accept_mutex_delay |
---|---|
默认: |
accept_mutex_delay 500ms; |
语境: |
events |
如果启用了accept_mutex,则指定如果另一个工作进程当前正在接受新连接,则工作进程将尝试重新启动接受新连接的最长时间。
句法: |
daemon |
---|---|
默认: |
daemon on; |
语境: |
main |
确定 nginx 是否应成为守护进程。主要在开发时使用。
句法: |
debug_connection
|
---|---|
默认: | — |
语境: |
events |
为选定的客户端连接启用调试日志。其他连接将使用由
error_log指令设置的日志记录级别。调试连接由 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:; ... }
为了使该指令起作用,需要使用 nginx 来构建--with-debug
,请参阅“调试日志”。
句法: |
debug_points |
---|---|
默认: | — |
语境: |
main |
该指令用于调试。
当检测到内部错误时,例如重新启动工作进程时套接字泄漏,启用会导致debug_points
核心文件创建 ( abort
) 或停止进程 ( stop
) 以使用系统调试器进行进一步分析。
句法: |
env |
---|---|
默认: |
env TZ; |
语境: |
main |
默认情况下,nginx 会删除从其父进程继承的所有环境变量(TZ 变量除外)。该指令允许保留一些继承的变量、更改它们的值或创建新的环境变量。这些变量是:
- 在可执行文件的 实时升级 期间继承;
- 由ngx_http_perl_module模块 使用 ;
- 由工作进程使用。应该记住,以这种方式控制系统库并不总是可能的,因为库通常仅在初始化期间检查变量,然后才能使用此指令设置变量。 上面提到的可执行文件的 实时升级是一个例外 。
TZ 变量始终被继承并可供ngx_http_perl_module模块 使用 ,除非显式配置。
使用示例:
env MALLOC_OPTIONS; env PERL5LIB=/data/site/modules; env OPENSSL_ALLOW_PROXY_CERTS=1;
NGINX 环境变量由 nginx 内部使用,不应由用户直接设置。
句法: |
error_log |
---|---|
默认: |
error_log logs/error.log error; |
语境: |
main ,,,,,,, http _ mail _ stream _ server _location |
配置日志记录。可以在同一配置级别 (1.5.2) 上指定多个日志。如果在main
配置级别上未明确定义将日志写入文件,则将使用默认文件。
第一个参数定义file
将存储日志。特殊值stderr
选择标准错误文件。可以通过指定“ ”前缀来配置记录到系统日志syslog:
。记录到
循环内存缓冲区memory:
可以通过指定“ ”前缀和 buffer
来配置size
,通常用于调试 (1.7.11)。
第二个参数确定level
日志记录的类型,可以是以下之一:
debug
、info
、notice
、
warn
、error
、crit
、
alert
或emerg
。上面的日志级别按严重性递增的顺序列出。设置特定的日志级别将导致记录指定的和更严重的日志级别的所有消息。例如,默认级别error
将导致error
、crit
、
alert
和emerg
消息被记录。如果省略此参数,则error
使用。
为了使debug
日志记录正常工作,需要使用 nginx 来构建--with-debug
,请参阅“调试日志”。
stream
该指令可以在版本 1.7.11 开始的级别 上指定 ,也可以在
句法: |
events { ... } |
---|---|
默认: | — |
语境: |
main |
提供配置文件上下文,在其中指定影响连接处理的指令。
句法: |
include |
---|---|
默认: | — |
语境: |
any |
将另一个file
或与指定匹配的文件包含mask
到配置中。包含的文件应包含语法正确的指令和块。
使用示例:
include mime.types; include vhosts/*.conf;
句法: |
load_module |
---|---|
默认: | — |
语境: |
main |
该指令出现在版本 1.9.11 中。
加载动态模块。
例子:
load_module modules/ngx_mail_module.so;
句法: |
lock_file |
---|---|
默认: |
lock_file logs/nginx.lock; |
语境: |
main |
nginx使用锁定机制来实现accept_mutex 并串行化对共享内存的访问。在大多数系统上,锁是使用原子操作实现的,并且该指令被忽略。在其他系统上,使用“锁定文件”机制。该指令指定锁定文件名称的前缀。
句法: |
master_process |
---|---|
默认: |
master_process on; |
语境: |
main |
确定工作进程是否启动。该指令适用于 nginx 开发人员。
句法: |
multi_accept |
---|---|
默认: |
multi_accept off; |
语境: |
events |
如果multi_accept
禁用,工作进程将一次接受一个新连接。否则,工作进程将一次接受所有新连接。
如果使用 kqueue连接处理方法, 该指令将被忽略,因为它报告等待接受的新连接的数量。
句法: |
pcre_jit |
---|---|
默认: |
pcre_jit off; |
语境: |
main |
该指令出现在版本 1.1.12 中。
启用或禁用对配置解析时已知的正则表达式使用“即时编译”(PCRE JIT)。
PCRE JIT 可以显着加快正则表达式的处理速度。
从版本 8.20 开始,使用配置参数构建的 PCRE 库中提供了 JIT--enable-jit
。当使用 nginx ( ) 构建 PCRE 库时--with-pcre=
,通过配置参数启用 JIT 支持--with-pcre-jit
。
句法: |
pid |
---|---|
默认: |
pid logs/nginx.pid; |
语境: |
main |
定义一个file
将存储主进程的进程ID。
句法: |
ssl_engine |
---|---|
默认: | — |
语境: |
main |
定义硬件 SSL 加速器的名称。
句法: |
thread_pool
|
---|---|
默认: |
thread_pool default threads=32 max_queue=65536; |
语境: |
main |
该指令出现在版本 1.7.11 中。
定义name
用于多线程读取和发送文件
而不阻塞
工作进程的线程池的 和 参数。
该threads
参数定义池中的线程数。
如果池中的所有线程都忙,则新任务将在队列中等待。该max_queue
参数限制允许在队列中等待的任务数量。默认情况下,队列中最多可以等待 65536 个任务。当队列溢出时,任务完成但出现错误。
句法: |
timer_resolution |
---|---|
默认: | — |
语境: |
main |
gettimeofday()
减少工作进程中的计时器分辨率,从而减少系统调用的
数量。默认情况下,gettimeofday()
每次收到内核事件时都会调用。在分辨率降低的情况下,gettimeofday()
每个指定仅调用一次interval
。
例子:
timer_resolution 100ms;
间隔的内部实现取决于所使用的方法:
- 使用
过滤
EVFILT_TIMER
器if ;kqueue
-
timer_create()
如果eventport
使用; -
setitimer()
否则。
句法: |
use |
---|---|
默认: | — |
语境: |
events |
指定要使用的连接处理
method
。通常不需要显式指定,因为 nginx 默认会使用最有效的方法。
句法: |
user |
---|---|
默认: |
user nobody nobody; |
语境: |
main |
工作进程使用的
定义user
和凭据。group
如果省略,则使用
group
名称等于 of 的组。user
句法: |
worker_aio_requests |
---|---|
默认: |
worker_aio_requests 32; |
语境: |
events |
该指令出现在版本 1.1.4 和 1.0.7 中。
当使用aio
和epollnumber
连接处理方式时,设置单个工作进程的
最大未完成异步 I/O 操作。
句法: |
worker_connections |
---|---|
默认: |
worker_connections 512; |
语境: |
events |
设置工作进程可以打开的最大同时连接数。
应该记住,这个数字包括所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接。另一个考虑因素是实际同时连接数不能超过当前最大打开文件数的限制,可以通过 worker_rlimit_nofile更改该限制。
句法: |
worker_cpu_affinity worker_cpu_affinity |
---|---|
默认: | — |
语境: |
main |
将工作进程绑定到 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。第二个例子适用于超线程。
特殊值auto
(1.9.10) 允许将工作进程自动绑定到可用的 CPU:
worker_processes auto; worker_cpu_affinity auto;
可选的 mask 参数可用于限制可用于自动绑定的 CPU:
worker_cpu_affinity auto 01010101;
该指令仅适用于 FreeBSD 和 Linux。
句法: |
worker_priority |
---|---|
默认: |
worker_priority 0; |
语境: |
main |
定义工作进程的调度优先级,就像通过命令完成的一样nice
:负数
number
意味着更高的优先级。允许的范围通常为 -20 到 20。
例子:
worker_priority -10;
句法: |
worker_processes |
---|---|
默认: |
worker_processes 1; |
语境: |
main |
定义工作进程的数量。
最佳值取决于许多因素,包括(但不限于)CPU 核心数量、存储数据的硬盘驱动器数量以及负载模式。当有人有疑问时,将其设置为可用 CPU 核心的数量将是一个好的开始(值“ auto
”将尝试自动检测它)。
auto
从1.3.8和1.2.5版本开始支持
该参数。
句法: |
worker_rlimit_core |
---|---|
默认: | — |
语境: |
main |
RLIMIT_CORE
更改工作进程
核心文件 ( ) 最大大小的限制。用于在不重新启动主进程的情况下增加限制。
句法: |
worker_rlimit_nofile |
---|---|
默认: | — |
语境: |
main |
RLIMIT_NOFILE
更改工作进程的
最大打开文件数 ( ) 的限制。用于在不重新启动主进程的情况下增加限制。
句法: |
worker_shutdown_timeout |
---|---|
默认: | — |
语境: |
main |
该指令出现在版本 1.11.11 中。
配置工作进程正常关闭的超时。当time
过期时,nginx会尝试关闭当前打开的所有连接,以方便关闭。
句法: |
working_directory |
---|---|
默认: | — |
语境: |
main |
定义工作进程的当前工作目录。它主要在写入核心文件时使用,在这种情况下,工作进程应该具有指定目录的写入权限。