核心功能

Example Configuration
Directives
     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启用,工作进程将轮流接受新连接。否则,所有工作进程都会收到有关新连接的通知,并且如果新连接量较低,某些工作进程可能会浪费系统资源。

accept_mutex 在支持 EPOLLEXCLUSIVE标志 (1.11.3) 的系统上或使用reuseport时 无需启用。

在版本 1.11.3 之前,默认值为on

句法: accept_mutex_delay time;
默认:
accept_mutex_delay 500ms;
语境: events

如果启用了accept_mutex,则指定如果另一个工作进程当前正在接受新连接,则工作进程将尝试重新启动接受新连接的最长时间。

句法: 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 file [level];
默认:
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日志记录的类型,可以是以下之一: debuginfonoticewarnerrorcritalertemerg。上面的日志级别按严重性递增的顺序列出。设置特定的日志级别将导致记录指定的和更严重的日志级别的所有消息。例如,默认级别error将导致errorcritalertemerg消息被记录。如果省略此参数,则error使用。

为了使debug日志记录正常工作,需要使用 nginx 来构建--with-debug,请参阅“调试日志”。

stream该指令可以在版本 1.7.11 开始的级别 上指定 ,也可以在mail版本 1.9.0 开始的级别上指定。

句法: events { ... }
默认:
语境: main

提供配置文件上下文,在其中指定影响连接处理的指令。

句法: include file | mask;
默认:
语境: any

将另一个file或与指定匹配的文件包含mask到配置中。包含的文件应包含语法正确的指令和块。

使用示例:

include mime.types;
include vhosts/*.conf;

句法: load_module file;
默认:
语境: main

该指令出现在版本 1.9.11 中。

加载动态模块。

例子:

load_module modules/ngx_mail_module.so;

句法: lock_file 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 可以显着加快正则表达式的处理速度。

从版本 8.20 开始,使用配置参数构建的 PCRE 库中提供了 JIT --enable-jit。当使用 nginx ( ) 构建 PCRE 库时--with-pcre=,通过配置参数启用 JIT 支持 --with-pcre-jit

句法: pid file;
默认:
pid logs/nginx.pid;
语境: main

定义一个file将存储主进程的进程ID。

句法: ssl_engine device;
默认:
语境: 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

工作进程使用的 定义user和凭据。group如果省略,则使用 group名称等于 of 的组。user

句法: worker_aio_requests number;
默认:
worker_aio_requests 32;
语境: events

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

当使用aioepollnumber连接处理方式时,设置单个工作进程的 最大未完成异步 I/O 操作。

句法: 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;

可选的 mask 参数可用于限制可用于自动绑定的 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”将尝试自动检测它)。

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

句法: 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

定义工作进程的当前工作目录。它主要在写入核心文件时使用,在这种情况下,工作进程应该具有指定目录的写入权限。