核心功能

示例配置
指令
     accept_mutex
     accept_mutex_delay
     daemon
     debug_connection
     debug_points
     env
     error_log
     events
     include
     load_module
     lock_file
     master_process
     multi_accept
     pcre_jit
     pid
     ssl_engine
     thread_pool
     timer_resolution
     use
     user
     worker_aio_requests
     worker_connections
     worker_cpu_affinity
     worker_priority
     worker_processes
     worker_rlimit_core
     worker_rlimit_nofile
     worker_shutdown_timeout
     working_directory

示例配置

user www www;
worker_processes 2;

error_log /var/log/nginx-error.log info;

events {
    use kqueue;
    worker_connections 2048;
}

...

指令

语法: accept_mutex on | off;
默认值:
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 on | off;
默认值:
daemon on;
上下文: main

确定 nginx 是否应该成为守护进程。主要用于开发期间。

语法: debug_connection address | CIDR | unix:;
默认值:
上下文: 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 abort | stop;
默认值:
上下文: main

此指令用于调试。

当检测到内部错误时,例如工作进程重新启动时套接字泄漏,启用 debug_points 将导致创建核心文件(abort)或停止进程(stop),以便使用系统调试器进行进一步分析。

语法: env variable[=value];
默认值:
env TZ;
上下文: main

默认情况下,nginx 删除从其父进程继承的所有环境变量,除了 TZ 变量。此指令允许保留一些继承的变量,更改其值或创建新的环境变量。然后,这些变量:

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)。

第二个参数确定日志记录的 级别,可以是以下之一:debuginfonoticewarnerrorcritalertemerg。上述日志级别按严重性递增的顺序列出。设置特定的日志级别将导致记录指定和更严重日志级别的所有消息。例如,默认级别 error 将导致记录 errorcritalertemerg 消息。如果省略此参数,则使用 error

要使 debug 日志记录起作用,nginx 需要使用 --with-debug 构建,参见“调试日志”。

该指令可以从版本 1.7.11 起在 stream 级别上指定,并从版本 1.9.0 起在 mail 级别上指定。

语法: 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 on | off;
默认值:
master_process on;
上下文: main

确定是否启动工作进程。此指令适用于nginx开发人员。

语法: multi_accept on | off;
默认值:
multi_accept off;
上下文: events

如果禁用了multi_accept,工作进程将一次接受一个新连接。否则,工作进程将一次接受所有新连接。

如果使用了kqueue连接处理方法,则会忽略该指令,因为它报告了等待被接受的新连接数量。

语法: pcre_jit on | off;
默认值:
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 name threads=number [max_queue=number];
默认值:
thread_pool default threads=32 max_queue=65536;
上下文: main

此指令出现在版本 1.7.11 中。

定义了用于多线程读取和发送文件而不阻塞工作进程的线程池的name和参数。

参数threads定义了池中线程的数量。

在池中的所有线程都繁忙时,新任务将等待在队列中。参数max_queue限制了允许在队列中等待的任务数量。默认情况下,最多可有 65536 个任务在队列中等待。当队列溢出时,任务将以错误完成。

语法: timer_resolution interval;
默认值:
上下文: main

降低工作进程中的计时器分辨率,从而减少gettimeofday()系统调用的次数。默认情况下,每次接收到内核事件时都会调用gettimeofday()。通过降低分辨率,gettimeofday()每个指定的interval只调用一次。

示例:

timer_resolution 100ms;

间隔的内部实现取决于所使用的方法:

语法: use method;
默认值:
上下文: events

指定要使用的连接处理方法method。通常不需要显式指定它,因为nginx默认会使用最有效的方法。

语法: user user [group];
默认值:
user nobody nobody;
上下文: main

定义了worker进程使用的usergroup凭据。如果省略了group,则使用与user名称相同的组。

语法: worker_aio_requests number;
默认值:
worker_aio_requests 32;
上下文: events

此指令出现在版本 1.1.4 和 1.0.7 中。

当使用aioepoll连接处理方法时,设置单个worker进程的最大异步I/O操作number

语法: worker_connections number;
默认:
worker_connections 512;
上下文: events

设置一个工作进程可以同时打开的最大连接数。

需要记住的是,这个数字包括所有连接(例如,与代理服务器的连接等),不仅仅是与客户端的连接。另一个考虑因素是,实际的同时连接数不能超过当前打开文件数的限制,这可以通过worker_rlimit_nofile进行更改。

语法: worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask];
默认:
上下文: 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 number;
默认:
worker_priority 0;
上下文: main

定义工作进程的调度优先级,就像nice命令一样:负number表示较高的优先级。允许的范围通常从-20到20不等。

示例:

worker_priority -10;

语法: worker_processes number | auto;
默认:
worker_processes 1;
上下文: main

定义工作进程的数量。

最佳值取决于许多因素,包括(但不限于)CPU核心数,存储数据的硬盘驱动器数以及负载模式。当存在疑问时,将其设置为可用CPU核心数会是一个好的起点(值“auto”将尝试自动检测)。

从版本1.3.8和1.2.5开始支持auto参数。

语法: worker_rlimit_core size;
默认:
上下文: main

更改工作进程的核心文件(RLIMIT_CORE)最大大小限制。用于增加限制而无需重新启动主进程。

语法: worker_rlimit_nofile number;
默认:
上下文: main

更改工作进程的最大打开文件数(RLIMIT_NOFILE)限制。用于增加限制而无需重新启动主进程。

语法: worker_shutdown_timeout time;
默认:
上下文: main

此指令出现在版本 1.11.11 中。

配置工作进程的优雅关闭超时。当 time 到期时,nginx 将尝试关闭当前所有打开的连接以促进关闭。

语法: working_directory directory;
默认:
上下文: main

定义工作进程的当前工作目录。主要用于写入核心文件时,此时工作进程应具有指定目录的写入权限。