核心功能
示例配置
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)或使用reuseport的系统上,无需启用accept_mutex
。
在版本1.11.3之前,默认值为on
。
语法: | accept_mutex_delay |
---|---|
默认值: |
accept_mutex_delay 500ms; |
上下文: | events |
如果启用了 accept_mutex,则指定在另一个 worker 进程当前正在接受新连接时,一个 worker 进程将尝试重新接受新连接的最长时间。
语法: | 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
配置级别上没有明确定义将日志写入文件,则会使用默认文件。
第一个参数定义将存储日志的 文件
。特殊值 stderr
选择标准错误文件。可以通过指定“syslog:
”前缀来配置日志记录到 syslog。可以通过指定“memory:
”前缀和缓冲区 大小
来配置日志记录到 循环内存缓冲区,通常用于调试(1.7.11)。
第二个参数确定日志记录的 级别
,可以是以下之一:debug
、info
、notice
、warn
、error
、crit
、alert
或 emerg
。上述日志级别按严重性递增的顺序列出。设置特定的日志级别将导致记录指定和更严重日志级别的所有消息。例如,默认级别 error
将导致记录 error
、crit
、alert
和 emerg
消息。如果省略此参数,则使用 error
。
要使debug
日志记录起作用,nginx 需要使用--with-debug
构建,参见“调试日志”。
该指令可以从版本 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开始可用于使用--enable-jit
配置参数构建的PCRE库。当使用nginx构建PCRE库(--with-pcre=
)时,JIT支持通过--with-pcre-jit
配置参数启用。
语法: | pid |
---|---|
默认值: |
pid logs/nginx.pid; |
上下文: | main |
定义存储主进程的进程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 |
定义了worker进程使用的user
和group
凭据。如果省略了group
,则使用与user
名称相同的组。
语法: | worker_aio_requests |
---|---|
默认值: |
worker_aio_requests 32; |
上下文: | events |
此指令出现在版本 1.1.4 和 1.0.7 中。
当使用aio与epoll连接处理方法时,设置单个worker进程的最大异步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
”将尝试自动检测)。
从版本1.3.8和1.2.5开始支持auto
参数。
语法: | worker_rlimit_core |
---|---|
默认: | — |
上下文: | main |
更改工作进程的核心文件(RLIMIT_CORE
)最大大小限制。用于增加限制而无需重新启动主进程。
语法: | worker_rlimit_nofile |
---|---|
默认: | — |
上下文: | main |
更改工作进程的最大打开文件数(RLIMIT_NOFILE
)限制。用于增加限制而无需重新启动主进程。
语法: | worker_shutdown_timeout |
---|---|
默认: | — |
上下文: | main |
此指令出现在版本 1.11.11 中。
配置工作进程的优雅关闭超时。当 time
到期时,nginx 将尝试关闭当前所有打开的连接以促进关闭。
语法: | working_directory |
---|---|
默认: | — |
上下文: | main |
定义工作进程的当前工作目录。主要用于写入核心文件时,此时工作进程应具有指定目录的写入权限。