Nginx

Core functionality

核心功能

  • 示例配置

  • 指令

  • accept_mutex

  • accept_mutex_delay

  • daemon

  • debug_connection

  • debug_points

  • error_log

  • env

  • 事件

  • include

  • load_module

  • lock_file

  • master_process

  • multi_accept

  • pcre_jit

  • pid

  • ssl_engine

  • thread_pool

  • timer_resolution

  • use

  • 用户

  • 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 开启|关闭;
默认:accept_mutex关闭;
语境:事件

如果accept_mutex启用,工作进程将轮流接受新的连接。否则,所有工作进程都会收到有关新连接的通知,并且如果新连接的数量很少,某些工作进程可能会浪费系统资源。

不需要accept_mutex在支持EPOLLEXCLUSIVE标志(1.11.3)的系统上启用或在使用复用端口时启用。在版本1.11.3之前,默认值是on

句法:accept_mutex_delay时间;
默认:accept_mutex_delay 500ms;
语境:事件

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

句法:daemon开启|关闭;
默认:daemon 开启;
语境:主要

确定nginx是否应该成为daemon。主要在开发过程中使用。

句法:debug_connection地址| CIDR | UNIX :;
默认:
语境:事件

为选定的客户端连接启用调试日志。其他连接将使用由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)以便使用系统调试器进行进一步分析。

句法:error_log文件级别;
默认:error_log logs / error.log错误;
语境: 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。 上面的日志级别按照严重性增加的顺序列出。 设置某个日志级别会导致记录指定的和更严重的日志级别的所有消息。 例如,默认的级别错误会导致错误,暴击,警报和emerg消息被记录。 如果省略此参数,则使用错误。

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

句法:env variable = value;
默认: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内部使用,不应由用户直接设置。

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

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

句法:包含文件| mask;
默认:
语境:任何情况

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

用法示例:

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

句法:load_module文件;
默认:
语境:main

加载一个动态模块。

例:

load_module modules/ngx_mail_module.so;

句法:lock_file文件;
默认:lock_file日志/ nginx.lock;
语境:主要

nginx使用锁定机制来实现accept_mutex并序列化访问共享内存。在大多数系统上,锁使用原子操作来实现,并且该指令被忽略。在其他系统上使用“锁定文件”机制。该指令为锁文件的名称指定一个前缀。

句法:master_process开启|关闭;
默认:master_process on;
语境:main

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

句法:multi_accept 开启 | 关闭;
默认:multi_accept 关闭;
语境:事件

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

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

句法:pcre_jit开启|关闭;
默认:pcre_jit 关闭;
语境:main

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

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

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

句法:pid文件;
默认:pid nginx.pid;
语境:main

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

句法:ssl_engine设备;
默认:
语境:main

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

句法:thread_pool名称 threads =数字 max_queue =数字;
默认:thread_pool 默认线程= 32 max_queue = 65536;
语境:main

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

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

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

句法:timer_resolution interval;
默认:
语境:main

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

例:

timer_resolution 100ms;

内部实施的时间间隔取决于使用的方法:

  • 如果使用kqueue,则使用EVFILT_TIMER过滤器;

  • 如果使用eventport则为timer_create()

  • 其他情况下为. setitimer()

句法:user method;
默认:
语境:事件

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

句法: user user group;
默认: user nobody nobody;
语境:main

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

句法:worker_aio_requests号;
默认:worker_aio_requests 32;
语境:事件

与epoll连接处理方法一起使用aio时,number为单个工作进程设置未完成的异步I / O操作的最大值。

句法:worker_connections number;
默认:worker_connections 512;
语境:events

设置工作进程可以打开的最大并发连接数。

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

句法:worker_cpu_affinity cpumask ...; worker_cpu_affinity auto cpumask;
默认:
语境:主要

将工作进程绑定到一组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 number | auto ;
默认:worker_processes 1;
语境:main

定义工作进程的数量。

最佳值取决于许多因素,包括(但不限于)CPU内核数量,存储数据的硬盘驱动器数量以及加载模式。当有人怀疑时,将其设置为可用CPU内核的数量将是一个好的开始(值“ auto”将尝试自动检测它)。

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

句法:worker_rlimit_core大小;
默认:
语境:main

更改RLIMIT_CORE工作进程的核心文件()的最大大小的限制。用于在不重新启动主进程的情况下增加限制。

句法:worker_rlimit_nofile号;
默认:
语境:主要

更改RLIMIT_NOFILE工作进程的最大打开文件数量限制()。用于在不重新启动主进程的情况下增加限制。

句法:worker_shutdown_timeout时间;
默认:
语境:main

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

句法:working_directory目录;
默认:
语境:main

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