核心功能
示例配置
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,则指定工作进程在另一个工作进程当前正在接收新连接时尝试重新开始接收新连接的最长时间。
语法 |
daemon |
---|---|
默认值 |
daemon on; |
上下文 |
主 |
确定 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 |
---|---|
默认值 | — |
上下文 |
主 |
此指令用于调试。
当检测到内部错误时,例如在工作进程重新启动时套接字泄漏,启用 debug_points
会导致创建核心文件(abort
)或停止进程(stop
)以供使用系统调试器进一步分析。
语法 |
env |
---|---|
默认值 |
env TZ; |
上下文 |
主 |
默认情况下,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; |
上下文 |
主 、http 、邮件 、流 、服务器 、位置 |
配置日志记录。可以在同一配置级别(1.5.2)上指定多个日志。如果在 主
配置级别上没有明确定义将日志写入文件,则将使用默认文件。
第一个参数定义一个将存储日志的 文件
。特殊值 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 { ... } |
---|---|
默认值 | — |
上下文 |
主 |
提供指定影响连接处理的指令的配置文件上下文。
语法 |
include |
---|---|
默认值 | — |
上下文 |
任何 |
将另一个 文件
或与指定的 掩码
匹配的文件包含到配置中。包含的文件应由语法正确的指令和块组成。
用法示例
include mime.types; include vhosts/*.conf;
语法 |
load_module |
---|---|
默认值 | — |
上下文 |
主 |
此指令出现在 1.9.11 版本中。
加载动态模块。
示例
load_module modules/ngx_mail_module.so;
语法 |
lock_file |
---|---|
默认值 |
lock_file logs/nginx.lock; |
上下文 |
主 |
nginx 使用锁定机制来实现 accept_mutex 并序列化对共享内存的访问。在大多数系统上,锁是使用原子操作实现的,并且忽略此指令。在其他系统上,使用“锁定文件”机制。此指令指定锁定文件名称的前缀。
语法 |
master_process |
---|---|
默认值 |
master_process on; |
上下文 |
主 |
确定是否启动工作进程。此指令 предназначен для разработчиков nginx。
语法 |
multi_accept |
---|---|
默认值 |
multi_accept off; |
上下文 |
events |
如果禁用了 multi_accept
,则工作进程一次将接受一个新连接。否则,工作进程将一次接受所有新连接。
如果使用 kqueue 连接处理方法,则忽略此指令,因为它报告正在等待接受的新连接数量。
语法 |
pcre_jit |
---|---|
默认值 |
pcre_jit off; |
上下文 |
主 |
此指令出现在 1.1.12 版本中。
启用或禁用在配置解析时已知的正则表达式的“即时编译”(PCRE JIT)的使用。
PCRE JIT 可以显着加快正则表达式的处理速度。
JIT 在版本 8.20 或更高版本的 PCRE 库中可用,这些库使用--enable-jit
配置参数构建。当使用 nginx(--with-pcre=
)构建 PCRE 库时,通过--with-pcre-jit
配置参数启用 JIT 支持。
语法 |
pid |
---|---|
默认值 |
pid logs/nginx.pid; |
上下文 |
主 |
定义一个将存储主进程进程 ID 的 文件
。
语法 |
ssl_engine |
---|---|
默认值 | — |
上下文 |
主 |
定义硬件 SSL 加速器的名称。
语法 |
thread_pool |
---|---|
默认值 |
thread_pool default threads=32 max_queue=65536; |
上下文 |
主 |
此指令出现在 1.7.11 版本中。
定义用于多线程读取和发送文件 而不会阻塞 工作进程的线程池的 名称
和参数。
threads
参数定义池中的线程数。
如果池中的所有线程都处于繁忙状态,则新任务将在队列中等待。max_queue
参数限制允许在队列中等待的任务数量。默认情况下,最多 65536 个任务可以在队列中等待。当队列溢出时,任务将完成并出现错误。
语法 |
timer_resolution |
---|---|
默认值 | — |
上下文 |
主 |
减少工作进程中的计时器分辨率,从而减少发出的 gettimeofday()
系统调用次数。默认情况下,每当收到内核事件时都会调用 gettimeofday()
。降低分辨率后,gettimeofday()
仅在指定的 间隔
内调用一次。
示例
timer_resolution 100ms;
间隔的内部实现取决于使用的方法
- 如果使用
kqueue
,则使用EVFILT_TIMER
过滤器; -
如果使用
eventport
,则使用timer_create()
; -
否则使用
setitimer()
。
语法 |
use |
---|---|
默认值 | — |
上下文 |
events |
指定要使用的 连接处理 方法
。通常不需要显式指定它,因为 nginx 默认会使用最有效的方法。
语法 |
user |
---|---|
默认值 |
user nobody nobody; |
上下文 |
主 |
定义工作进程使用的 用户
和 组
凭据。如果省略 组
,则使用名称等于 用户
的组。
语法 |
worker_aio_requests |
---|---|
默认值 |
worker_aio_requests 32; |
上下文 |
events |
此指令出现在 1.1.4 和 1.0.7 版本中。
当使用 aio 和 epoll 连接处理方法时,设置单个工作进程的未完成异步 I/O 操作的最大 数量
。
语法 |
worker_connections |
---|---|
默认值 |
worker_connections 512; |
上下文 |
events |
设置工作进程可以打开的同时连接的最大数量。
应该记住,此数字包括所有连接(例如,与代理服务器的连接等),而不仅仅是与客户端的连接。另一个考虑因素是,实际的同时连接数不能超过当前打开文件最大数量的限制,这可以通过 worker_rlimit_nofile 更改。
语法 |
worker_cpu_affinity worker_cpu_affinity |
---|---|
默认值 | — |
上下文 |
主 |
将工作进程绑定到 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; |
上下文 |
主 |
定义工作进程的调度优先级,类似于 nice
命令:负 数字
表示更高的优先级。允许的范围通常在 -20 到 20 之间。
示例
worker_priority -10;
语法 |
worker_processes |
---|---|
默认值 |
worker_processes 1; |
上下文 |
主 |
定义工作进程的数量。
最佳值取决于许多因素,包括(但不限于)CPU 内核数、存储数据的硬盘驱动器数量以及负载模式。如有疑问,将其设置为可用 CPU 内核数是一个好的开始(值“auto
”将尝试自动检测)。
auto
参数从 1.3.8 和 1.2.5 版本开始支持。
语法 |
worker_rlimit_core |
---|---|
默认值 | — |
上下文 |
主 |
更改工作进程的核心文件最大大小限制(RLIMIT_CORE
)。用于在不重启主进程的情况下增加限制。
语法 |
worker_rlimit_nofile |
---|---|
默认值 | — |
上下文 |
主 |
更改工作进程打开文件最大数量的限制(RLIMIT_NOFILE
)。用于在不重启主进程的情况下增加限制。
语法 |
worker_shutdown_timeout |
---|---|
默认值 | — |
上下文 |
主 |
此指令出现在 1.11.11 版本中。
配置工作进程优雅关闭的超时时间。当 时间
到期时,nginx 将尝试关闭当前打开的所有连接以促进关闭。
语法 |
working_directory |
---|---|
默认值 | — |
上下文 |
主 |
定义工作进程的当前工作目录。它主要用于写入核心文件时,在这种情况下,工作进程应该对指定的目录具有写权限。