nginx

核心机能


english
русский

简体中文
עברית
日本語
türkçe

新闻 [en]
nginx 介绍
下载 [en]
安全漏洞 [en]
文档
FAQ
外部连接 [en]
书籍 [en]
支持 [en]
捐献 [en]

trac
wiki
twitter
nginx.com
示例配置
指令
     accept_mutex
     accept_mutex_delay
     daemon
     debug_connection
     debug_points
     error_log
     env
     events
     include
     lock_file
     master_process
     multi_accept
     pcre_jit
     pid
     ssl_engine
     timer_resolution
     use
     user
     worker_aio_requests
     worker_connections
     worker_cpu_affinity
     worker_priority
     worker_processes
     worker_rlimit_core
     worker_rlimit_nofile
     worker_rlimit_sigpending
     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 on;
上下文: events

如果使用,nginx的多个工作进程将以串行方式接入新连接。否则,新连接将通报给所有工作进程,而且如果新连接数量较少,某些工作进程可能只是在浪费系统资源。

必须开启accept_mutex才能使用rtsig连接处理方式。

语法: 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:;
    ...
}

只有在编译时设置--with-debug,上述指令才可以工作。

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

这条指令用于调试。

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

语法: error_log file | stderr [debug | info | notice | warn | error | crit | alert | emerg];
默认值:
error_log logs/error.log error;
上下文: main, http, server, location

配置日志。

第一个参数定义了存放日志的文件。 如果设置为特殊值stderr,nginx会将日志输出到标准错误输出。

第二个参数定义日志级别。 日志级别在上面已经按严重性由轻到重的顺序列出。 设置为某个日志级别将会使指定级别和更高级别的日志都被记录下来。 比如,默认级别error会使nginx记录所有errorcritalertemerg级别的消息。 如果省略这个参数,nginx会使用error

为了使debug日志工作,需要添加--with-debug编译选项。

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

nginx默认会删除从父进程继承的除TZ变量以外的所有环境变量。 这条指令允许nginx保留某些继承的环境变量,改变它们的值,或者创建新的环境变量。 这些变量将:

  • 热升级nginx执行文件时被继承;
  • ngx_http_perl_module模块使用;
  • 被工作进程使用。 请大家牢记于心,使用这种方法控制系统库不总是可行的,因为在这条指令设置环境变量以前,系统库初始化时就已检查这些环境变量的情况也并非少见。 但有一个例外,就是上面提到的热升级nginx执行文件。

TZ变量总是被继承,并且可被ngx_http_perl_module模块使用, 除非明确配置不允许这样。

使用示例:

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

NGINX环境变量是由nginx内部设置和使用,用户不应直接设置它。

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

提供配置上下文,以解析那些影响连接处理的指令。

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

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

使用示例:

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

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

关闭时,工作进程一次只会接入一个新连接。否则,工作进程一次会将所有新连接全部接入。

使用kqueue连接处理方式时,可忽略这条指令,因为kqueue可以报告有多少新连接等待接入。

使用rtsig连接处理方式将自动开启multi_accept

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

这个指令出现在版本 1.1.12.

开启或禁止在配置解析阶段为正则表达式使用“即时编译”(PCRE JIT)技术。

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

从PCRE 8.20版本开始,可用PCRE的--enable-jit编译选项打开JIT功能。 当使用PCRE源码库编译nginx时(--with-pcre=), 应该使用nginx的--with-pcre-jit编译选项开启JIT支持。

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

定义存储nginx主进程ID的file

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

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

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

在工作进程中降低定时器的精度,因此可以减少产生gettimeofday()系统调用的次数。 默认情况下,每收到一个内核事件,nginx都会调用gettimeofday()。 使用此指令后,nginx仅在每经过指定的interval时间间隔后调用一次gettimeofday()

Example:

timer_resolution 100ms;

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

  • 使用kqueue时,会使用EVFILT_TIMER过滤器;
  • 使用eventport时,会使用timer_create()
  • 否则会使用setitimer()

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

指定使用的连接处理method(方式)。 通常不需要明确设置,因为nginx默认会使用最高效的方法。

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

定义工作进程使用的usergroup身份。 如果省略group,nginx会使用与user相同的组名。

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

这个指令出现在版本 1.1.4 和 1.0.7.

在使用epoll连接处理方式的情况下使用aio时, 可以设置单个工作进程未处理的异步I/O操作的最大number(数量)

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

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

需要记住,这个数量包含所有连接(比如,和后端服务器建立的连接,还有其他的), 而不仅仅是和客户端的连接。 另外需要考虑的是,实际的并发连接数是不能超过打开文件的最大数量限制的,这个限制可以用worker_rlimit_nofile指令修改。

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

绑定工作进程到指定的CPU集合。每个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。 上面第二个例子适合于超线程的机器。

这条指令仅在FreeFSD和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”时,nginx会自动检测它)。

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

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

修改工作进程的core文件尺寸的最大值限制(RLIMIT_CORE),用于在不重启主进程的情况下增大该限制。

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

修改工作进程的打开文件数的最大值限制(RLIMIT_NOFILE),用于在不重启主进程的情况下增大该限制。

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

在支持rtsig连接处理方式的系统中,修改工作进程的信号队列长度限制(RLIMIT_SIGPENDING),用于在不重启主进程的情况下增大该限制。

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

定义工作进程的当前工作路径。 主要用于设置core文件的目标地址。工作进程应当具有指定路径的写权限。

翻译: cfsego