核心功能
示例配置
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
,工作进程将轮流接受新连接。否则,所有工作进程都将收到有关新连接的通知,并且如果新连接量较低,则某些工作进程可能只会浪费系统资源。
无需在支持 EPOLLEXCLUSIVE 标志 (1.11.3) 的系统上启用 accept_mutex
,或在使用 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:; ... }
要使此指令生效,需要使用 --with-debug
编译 nginx,请参见“调试日志”。
语法 |
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
配置级别上没有明确定义将日志写入文件,则将使用默认文件。
第一个参数定义了一个将存储日志的文件
。特殊值stderr
选择标准错误文件。可以通过指定“syslog:
”前缀来配置记录到syslog。可以通过指定“memory:
”前缀和缓冲区大小
来配置记录到循环内存缓冲区,通常用于调试(1.7.11)。
第二个参数确定记录的级别
,可以是以下之一:debug
、info
、notice
、warn
、error
、crit
、alert
或emerg
。日志级别按严重性递增的顺序列出。设置某个日志级别将导致记录指定级别和更严重日志级别的所有消息。例如,默认级别error
将导致记录error
、crit
、alert
和emerg
消息。如果省略此参数,则使用error
。
要使debug
记录正常工作,需要使用--with-debug
构建 nginx,请参见“调试日志”。
从版本 1.7.11 开始,可以在stream
级别上指定该指令,从版本 1.9.0 开始,可以在
语法 |
events { ... } |
---|---|
默认值 | — |
上下文 |
main |
提供配置了影响连接处理的指令的配置文件上下文。
语法 |
include |
---|---|
默认值 | — |
上下文 |
任意 |
将另一个文件
或与指定掩码
匹配的文件包含到配置中。包含的文件应由语法正确的指令和块组成。
用法示例
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 可以显著加快正则表达式的处理速度。
JIT 可用于从 8.20 版开始的 PCRE 库,该库使用--enable-jit
配置参数构建。当 PCRE 库使用 nginx 构建(--with-pcre=
)时,通过--with-pcre-jit
配置参数启用 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;
间隔的内部实现取决于所使用的方法
-
如果使用
kqueue
,则为EVFILT_TIMER
过滤器; -
如果使用
eventport
,则为timer_create()
; -
否则,为
setitimer()
。
语法 |
use |
---|---|
默认值 | — |
上下文 |
events |
指定要使用的 连接处理 method
。通常无需明确指定它,因为 nginx 默认情况下将使用最有效的方法。
语法 |
user |
---|---|
默认值 |
user nobody nobody; |
上下文 |
main |
定义工作进程使用的user
和group
凭据。如果省略group
,则使用一个名称等于user
的组。
语法 |
worker_aio_requests |
---|---|
默认值 |
worker_aio_requests 32; |
上下文 |
events |
该指令出现在 1.1.4 和 1.0.7 版本中。
当使用 aio 和 epoll 连接处理方法时,设置单个工作进程的未完成异步 I/O 操作的最大number
。
语法 |
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;
可选掩码参数可用于限制自动绑定的可用 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 |
定义工作进程的当前工作目录。它主要用于编写核心文件时,在这种情况下,工作进程应具有指定目录的写权限。