核心模块#
该模块提供了服务器基本操作所需的基本功能和配置指令,并处理管理工作进程、配置事件驱动模型,以及处理传入连接和请求等关键任务。它包括用于设置主进程、错误日志记录和控制服务器低级行为的关键指令。
配置示例#
user www www;
worker_processes 2;
error_log /var/log/error.log info;
events {
use kqueue; worker_connections 2048;
}
指令#
accept_mutex#
当启用 accept_mutex
时,工作进程将轮流接受新连接。没有此设置时,所有工作进程都会被通知新连接,这可能导致系统资源使用效率低下,如果新连接的数量较少。
备注
在支持 EPOLLEXCLUSIVE
标志的系统上,或使用 reuseport 指令时,无需启用 accept_mutex
。
accept_mutex_delay#
如果启用了 accept_mutex,此指令指定工作进程在另一个工作进程已处理新连接时继续接受新连接的最大等待时间。
daemon#
决定 Angie 是否作为守护进程运行。这主要用于开发过程。
debug_connection#
为特定客户端连接启用调试日志。其他连接将使用 error_log 指令设置的日志级别。可以通过 IPv4 或 IPv6 地址、网络或主机名指定连接。对于使用 UNIX 域套接字的连接,使用 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:;
# ...
}
重要
为使此指令生效,Angie 必须使用启用 调试日志 构建。
debug_points#
此指令用于调试。
当出现内部错误时,例如工作进程重启期间的套接字泄漏,启用 debug_points
将创建一个核心文件 (abort
) 或停止进程 (stop
) 以便使用系统调试器进行进一步分析。
env#
默认情况下,Angie 会删除从父进程继承的所有环境变量,除了 TZ
变量。此指令允许您保留一些继承的变量,修改其值,或创建新的环境变量。
这些变量随后:
在 可执行文件的实时升级 时继承
被 Perl 模块使用
可供工作进程使用
请注意,以这种方式控制系统库可能并不总是有效,因为库通常只在初始化期间检查变量,这发生在此指令生效之前。TZ
变量始终继承并可供 Perl 模块使用,除非明确配置为否则。
示例:
env MALLOC_OPTIONS;
env PERL5LIB=/data/site/modules;
env OPENSSL_ALLOW_PROXY_CERTS=1;
备注
ANGIE
环境变量由 Angie 内部使用,用户不应直接设置。
error_log#
|
|
默认值 |
|
main, http, mail, stream, server, location |
配置日志记录,允许在同一配置级别指定多个日志。如果在 main
配置级别未显式定义日志文件,将使用默认文件。
第一个参数指定用于存储日志的文件。特殊值 stderr
选择标准错误流。要配置日志记录到 syslog,使用 "syslog:"
前缀。要记录到 循环内存缓冲区,使用 "memory:"
前缀后跟缓冲区大小;这通常用于调试。
第二个参数设置日志级别,可以是以下之一:debug
, info
, notice
, warn
, error
, crit
, alert
, 或 emerg
。这些级别按照严重性递增顺序排列。设置日志级别将捕获等于和更高严重性的消息:
设置 |
捕获的级别 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
如果省略此参数,则使用 error
作为默认日志级别。
重要
为使 debug
日志级别生效,Angie 必须使用启用 调试日志 构建。
events#
提供用于影响连接处理的指令的配置文件上下文。
include#
将另一个文件或符合指定 mask 的文件包含到配置中。包含的文件必须包含语法正确的指令和块。
示例:
include mime.types;
include vhosts/*.conf;
load_module#
从指定文件加载动态模块。如果提供了相对路径,它将根据 --prefix
构建选项 进行解释。要验证路径:
$ sudo angie -V
示例:
load_module modules/ngx_mail_module.so;
lock_file#
Angie 使用锁定机制实现 accept_mutex 并串行访问共享内存。在大多数系统上,锁是通过原子操作管理的,因此不需要此指令。然而,在某些系统上,使用替代的 lock file 机制。此指令设置锁文件名称的前缀。
master_process#
决定是否启动工作进程。此指令是为 Angie 开发者准备的。
multi_accept#
|
工作进程将同时接受所有新连接。 |
|
工作进程将一次接受一个新连接。 |
备注
如果使用 kqueue 连接处理方法,则忽略此指令,因为它提供了准备接受的新连接数量。
pcre_jit#
为在配置解析时已知的正则表达式启用或禁用“即时编译”(PCRE JIT)。
PCRE JIT 可以显著加速正则表达式处理。
重要
JIT 在从版本 8.20 开始的 PCRE 库中可用,前提是它们是使用 --enable-jit
配置选项构建的。当 Angie 使用 PCRE 库构建时 (--with-pcre=
),使用 --with-pcre-jit
选项启用 JIT 支持。
pid#
指定将存储 Angie 主进程 ID 的 file。该文件是原子创建的,确保其内容始终正确。off
设置禁用此文件的创建。
备注
如果在重新配置期间修改 file 设置但指向前一个 PID 文件的符号链接,则文件不会被重新创建。
ssl_engine#
指定硬件 SSL 加速器的名称。
thread_pool#
|
|
默认值 |
|
main |
定义用于多线程文件读取和发送的线程池的 name 和参数,不阻塞 工作进程。
threads
参数指定池中的线程数。
如果所有线程都忙,新任务将等待在队列中。max_queue
参数限制队列中可以等待的任务数量。默认情况下,队列可以容纳多达 65536 个任务。当队列溢出时,新任务将以错误结束。
timer_resolution#
降低工作进程中的定时器分辨率,从而减少 gettimeofday()
系统调用的频率。默认情况下,每次查询内核事件时都调用 gettimeofday()
。降低分辨率后,它仅在指定的间隔内调用一次。
示例:
timer_resolution 100ms;
间隔的内部实现取决于使用的方法:
use#
指定要使用的 连接处理 method。通常不需要显式指定它,因为 Angie 默认使用最有效的方法。
user#
定义工作进程的用户和组凭证(另请参见 构建选项)。如果仅设置用户,则指定的用户名也用于组。
worker_aio_requests#
worker_connections#
设置工作进程可以打开的最大同时连接数。
请注意,此数字包括所有连接,例如与代理服务器的连接,而不仅仅是客户端连接。此外,同时连接的实际数量不能超过系统的打开文件限制,这可以通过 worker_rlimit_nofile 调整。
将工作进程绑定到特定的 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
允许自动将工作进程绑定到可用 CPU:
worker_processes auto;
worker_cpu_affinity auto;
可选的掩码参数可用于 限制可用于自动绑定的 CPU:
worker_cpu_affinity auto 01010101;
重要
此指令仅在 FreeBSD 和 Linux 上可用。
worker_priority#
定义工作进程的调度优先级, 类似于 nice 命令: 负的 number 表示更高的优先级。 允许的范围通常从 -20 到 20。
示例:
worker_priority -10;
worker_processes#
定义工作进程的数量。
最佳值取决于多种因素,包括 CPU 核心数、
硬盘驱动器数量和负载模式。
如果不确定,建议从可用 CPU 核心数开始。
值 auto
尝试自动检测最佳的工作进程数量。
worker_rlimit_core#
更改工作进程的核心文件最大大小限制 (RLIMIT_CORE
)。
这样可以在不重启主进程的情况下增加限制。
worker_rlimit_nofile#
更改工作进程的最大打开文件数限制 (RLIMIT_NOFILE
)。
这样可以在不重启主进程的情况下增加限制。
worker_shutdown_timeout#
配置工作进程优雅关机的超时时间。 一旦 time 到期,Angie 将尝试关闭所有活动连接 以完成关机过程。
优雅关机是通过向主进程发送 QUIT 信号 来启动的,告诉工作进程
停止接受新连接,同时允许现有连接完成。
工作进程继续处理活动请求直到完成,然后它们
干净地退出。如果连接持续打开超过
worker_shutdown_timeout
,Angie 将强制关闭这些
连接以完成关机。
working_directory#
定义工作进程的当前工作目录。 这主要用于写入核心文件, 因此工作进程必须对指定的目录具有写权限。