核心功能

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;
}

...

Directives

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

如果accept_mutex已启用, 工作进程将轮流接受新连接。 否则,所有工作进程都将收到有关新连接的通知。 如果新连接的数量较低,则某些 worker 进程 可能只是浪费系统资源。

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

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

语法: accept_mutex_delay time;
默认值:
accept_mutex_delay 500ms;
上下文: events

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

语法: daemon on | off;
默认值:
daemon on;
上下文: main

确定 nginx 是否应成为守护进程。 主要用于开发过程中。

语法: debug_connection address | CIDR | unix:;
默认值:
上下文: events

为选定的客户端连接启用调试日志。 其他连接将使用 error_log Directives设置的日志记录级别。 调试的连接由 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:;
    ...
}

要使此Directives正常工作,nginx 需要 构建--with-debug, 参见 “调试日志”。

语法: debug_points abort | stop;
默认值:
上下文: main

此Directives用于调试。

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

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

默认情况下,nginx 会删除所有继承的环境变量 从其父进程(TZ 变量除外)。 该Directives允许保留一些继承的变量 更改它们的值,或创建新的环境变量。 这些变量是:

  • 在可执行文件的实时升级期间继承;
  • ngx_http_perl_module 模块使用;
  • 由 worker 进程使用。 应该记住,以这种方式控制系统库 并不总是可能的,因为库通常会检查 变量仅在初始化期间,远在可以设置它们之前 使用此Directives。 一个例外是上面提到的可执行文件的实时升级

TZ 变量始终被继承并可用于 ngx_http_perl_module 模块,除非它被显式配置。

使用示例:

env MALLOC_OPTIONS;
env PERL5LIB=/data/site/modules;
env OPENSSL_ALLOW_PROXY_CERTS=1;

nginx 环境变量由 nginx internal使用 ,不应由用户直接设置。

语法: error_log file [level];
默认值:
error_log logs/error.log error;
上下文: main,http,mail,stream,server,location

配置日志记录。 可以在同一配置级别 (1.5.2) 上指定多个日志。 如果在main配置级别:将日志写入文件 未明确定义,则将使用默认文件。

第一个参数定义了一个file,它将存储日志。 特殊值stderr选择标准错误文件。 可以通过指定 syslog 来配置日志记录到 syslogsyslog:“ 前缀。 可以通过指定 ”memory:“ 前缀和 缓冲区size,通常用于调试 (1.7.11)。

第二个参数确定level伐木, ,可以是以下值之一:debug,info,notice,warn,error,crit,alertemerg. 上述日志级别按严重性递增的顺序列出。 设置某个日志级别将导致所有 要记录的指定和更严重的日志级别。 例如,默认级别error将 原因error,crit,alertemerg消息 进行记录。 如果省略此参数,则error被使用。

debuglogging 才能正常工作,nginx 需要 构建--with-debug, 参见 “调试日志”。

可以在stream水平 从版本 1.7.11 开始, 和mail水平 从 1.9.0 版本开始。

语法: events { ... }
默认值:
上下文: main

提供配置文件上下文,其中 影响连接处理。

语法: include file | mask;
默认值:
上下文: any

包括另一个file或与 指定mask,导入到配置中。 包含的文件应包括 语法正确的Directives和块。

使用示例:

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

语法: load_module file;
默认值:
上下文: main

该Directives出现在版本 1.9.11 中。

加载动态模块。

例:

load_module modules/ngx_mail_module.so;

语法: lock_file file;
默认值:
lock_file logs/nginx.lock;
上下文: main

nginx 使用锁定机制来实现对共享内存的 accept_mutex 和序列化访问。 在大多数系统上,锁是使用原子作实现的。 ,并且此Directives将被忽略。 在其他系统上,使用 “lock file” 机制。 该Directives指定锁定文件名称的前缀。

语法: master_process on | off;
默认值:
master_process on;
上下文: main

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

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

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

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

语法: pcre_jit on | off;
默认值:
pcre_jit off;
上下文: main

该Directives出现在版本 1.1.12 中。

启用或禁用“实时编译”(PCRE JIT) 了解配置解析时已知的正则表达式。

PCRE JIT 可以显著加快正则表达式的处理速度。

JIT 在 PCRE 库(从版本 8.20 开始)中可用 使用--enable-jitconfiguration 参数。 当 PCRE 库是使用 nginx (--with-pcre=), JIT 支持是通过--with-pcre-jitconfiguration 参数。

语法: pid file;
默认值:
pid logs/nginx.pid;
上下文: main

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

语法: ssl_engine device;
默认值:
上下文: main

定义硬件 SSL 加速器的名称。

在配置测试期间,OpenSSL 可能会动态加载该模块。

语法: thread_pool name threads=number [max_queue=number];
默认值:
thread_pool default threads=32 max_queue=65536;
上下文: main

该Directives出现在版本 1.7.11 中。

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

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

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

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

降低工作进程中的计时器解析,从而减少 数量gettimeofday()系统调用。 默认情况下,gettimeofday()每次调用 收到内核事件。 分辨率降低时,gettimeofday()仅 每个指定的interval.

例:

timer_resolution 100ms;

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

  • EVFILT_TIMERfilter ifkqueue被使用;
  • timer_create()如果eventport被使用;
  • setitimer()否则。

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

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

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

定义usergroup工作进程使用的凭证。 如果group,则名称等于 的user被使用。

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

该Directives出现在版本 1.1.4 和 1.0.7 中。

当使用 aio 配合 epoll 连接处理方式时,设置最大值number之 出色的异步 I/O作 对于单个工作进程。

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

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

应该记住,这个数字包括所有连接 (例如,与代理服务器的连接等), 不仅仅是与客户的联系。 另一个考虑因素是实际的 simultaneous 数量 连接数不能超过 打开文件的最大数量,可通过 worker_rlimit_nofile 进行更改。

语法: worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask];
默认值:
上下文: main

将工作进程绑定到 CPU 集。 每个 CPU 集都由允许的 CPU 的位掩码表示。 应该为每个 worker 进程定义一个单独的集合。 默认情况下,工作进程不绑定到任何特定的 CPU。

例如

worker_processes    4;
worker_cpu_affinity 0001 0010 0100 1000;

将每个 worker 进程绑定到单独的 CPU,而

worker_processes    2;
worker_cpu_affinity 0101 1010;

将第一个工作进程绑定到 CPU0/CPU2, 第二个工作进程到 CPU1/CPU3。 第二个示例适用于超线程。

特殊值auto(1.9.10) 允许 将 worker 进程自动绑定到可用的 CPU:

worker_processes auto;
worker_cpu_affinity auto;

可选的 mask 参数可用于限制 CPU 可用于自动绑定:

worker_cpu_affinity auto 01010101;

该Directives仅在 FreeBSD 和 Linux 上可用。

语法: worker_priority number;
默认值:
worker_priority 0;
上下文: main

定义工作进程的调度优先级,如下所示 done bynice命令:负数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

该Directives出现在版本 1.11.11 中。

配置超时以正常关闭工作进程。 当time到期 nginx 将尝试关闭当前打开的所有连接 以方便关闭。

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

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