核心模块#

该模块提供了服务器基本操作所需的基本功能和配置指令,并处理管理工作进程、配置事件驱动模型,以及处理传入连接和请求等关键任务。它包括用于设置主进程、错误日志记录和控制服务器低级行为的关键指令。

配置示例#

user www www;
worker_processes 2;

error_log /var/log/error.log info;

events {

    use kqueue; worker_connections 2048;
}

指令#

accept_mutex#

语法

accept_mutex on | off;

默认值

accept_mutex off;

上下文

events

当启用 accept_mutex 时,工作进程将轮流接受新连接。没有此设置时,所有工作进程都会被通知新连接,这可能导致系统资源使用效率低下,如果新连接的数量较少。

备注

在支持 EPOLLEXCLUSIVE 标志的系统上,或使用 reuseport 指令时,无需启用 accept_mutex

accept_mutex_delay#

语法

accept_mutex_delay time;

默认值

accept_mutex_delay 500ms;

上下文

events

如果启用了 accept_mutex,此指令指定工作进程在另一个工作进程已处理新连接时继续接受新连接的最大等待时间。

daemon#

语法

daemon on | off;

默认值

daemon on;

上下文

main

决定 Angie 是否作为守护进程运行。这主要用于开发过程。

debug_connection#

语法

debug_connection address | CIDR | unix:;

默认值

上下文

events

为特定客户端连接启用调试日志。其他连接将使用 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;

默认值

上下文

main

此指令用于调试。

当出现内部错误时,例如工作进程重启期间的套接字泄漏,启用 debug_points 将创建一个核心文件 (abort) 或停止进程 (stop) 以便使用系统调试器进行进一步分析。

env#

语法

env variable[=value];

默认值

env TZ;

上下文

main

默认情况下,Angie 会删除从父进程继承的所有环境变量,除了 TZ 变量。此指令允许您保留一些继承的变量,修改其值,或创建新的环境变量。

这些变量随后:

请注意,以这种方式控制系统库可能并不总是有效,因为库通常只在初始化期间检查变量,这发生在此指令生效之前。TZ 变量始终继承并可供 Perl 模块使用,除非明确配置为否则。

示例:

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

备注

ANGIE 环境变量由 Angie 内部使用,用户不应直接设置。

error_log#

语法

error_log file [level];

默认值

error_log logs/error.log error; (路径取决于 --error-log-path 构建选项

上下文

main, http, mail, stream, server, location

配置日志记录,允许在同一配置级别指定多个日志。如果在 main 配置级别未显式定义日志文件,将使用默认文件。

第一个参数指定用于存储日志的文件。特殊值 stderr 选择标准错误流。要配置日志记录到 syslog,使用 "syslog:" 前缀。要记录到 循环内存缓冲区,使用 "memory:" 前缀后跟缓冲区大小;这通常用于调试。

第二个参数设置日志级别,可以是以下之一:debug, info, notice, warn, error, crit, alert, 或 emerg。这些级别按照严重性递增顺序排列。设置日志级别将捕获等于和更高严重性的消息:

设置

捕获的级别

debug

debug, info, notice, warn, error, crit, alert, emerg

info

info, notice, warn, error, crit, alert, emerg

notice

notice, warn, error, crit, alert, emerg

warn

warn, error, crit, alert, emerg

error

error, crit, alert, emerg

crit

crit, alert, emerg

alert

alert, emerg

emerg

emerg

如果省略此参数,则使用 error 作为默认日志级别。

重要

为使 debug 日志级别生效,Angie 必须使用启用 调试日志 构建。

events#

语法

events { ... };

默认值

上下文

main

提供用于影响连接处理的指令的配置文件上下文。

include#

语法

include file | mask;

默认值

上下文

any

将另一个文件或符合指定 mask 的文件包含到配置中。包含的文件必须包含语法正确的指令和块。

示例:

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

load_module#

语法

load_module file;

默认值

上下文

main

从指定文件加载动态模块。如果提供了相对路径,它将根据 --prefix 构建选项 进行解释。要验证路径:

$ sudo angie -V

示例:

load_module modules/ngx_mail_module.so;

lock_file#

语法

lock_file file;

默认值

lock_file logs/angie.lock; (路径取决于 --lock-path 构建选项

上下文

main

Angie 使用锁定机制实现 accept_mutex 并串行访问共享内存。在大多数系统上,锁是通过原子操作管理的,因此不需要此指令。然而,在某些系统上,使用替代的 lock file 机制。此指令设置锁文件名称的前缀。

master_process#

语法

master_process on | off;

默认值

master_process on;

上下文

main

决定是否启动工作进程。此指令是为 Angie 开发者准备的。

multi_accept#

语法

multi_accept on | off;

默认值

multi_accept off;

上下文

events

on

工作进程将同时接受所有新连接。

off

工作进程将一次接受一个新连接。

备注

如果使用 kqueue 连接处理方法,则忽略此指令,因为它提供了准备接受的新连接数量。

pcre_jit#

语法

pcre_jit on | off;

默认值

pcre_jit off;

上下文

main

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

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

重要

JIT 在从版本 8.20 开始的 PCRE 库中可用,前提是它们是使用 --enable-jit 配置选项构建的。当 Angie 使用 PCRE 库构建时 (--with-pcre=),使用 --with-pcre-jit 选项启用 JIT 支持。

pid#

语法

pid file | off;

默认值

pid logs/angie.pid; (路径取决于 --pid-path 构建选项

上下文

main

指定将存储 Angie 主进程 ID 的 file。该文件是原子创建的,确保其内容始终正确。off 设置禁用此文件的创建。

备注

如果在重新配置期间修改 file 设置但指向前一个 PID 文件的符号链接,则文件不会被重新创建。

ssl_engine#

语法

ssl_engine device;

默认值

上下文

main

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

thread_pool#

语法

thread_pool name threads=number [max_queue=number];

默认值

thread_pool default threads=32 max_queue=65536;

上下文

main

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

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

如果所有线程都忙,新任务将等待在队列中。max_queue 参数限制队列中可以等待的任务数量。默认情况下,队列可以容纳多达 65536 个任务。当队列溢出时,新任务将以错误结束。

timer_resolution#

语法

timer_resolution interval;

默认值

上下文

main

降低工作进程中的定时器分辨率,从而减少 gettimeofday() 系统调用的频率。默认情况下,每次查询内核事件时都调用 gettimeofday()。降低分辨率后,它仅在指定的间隔内调用一次。

示例:

timer_resolution 100ms;

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

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

  • 如果使用 eventport,则为 timer_create() 函数。

  • 否则为 setitimer() 函数。

use#

语法

use method;

默认值

上下文

events

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

user#

语法

user user [group];

默认值

user <--user build option> <--group build option>;

上下文

main

定义工作进程的用户和组凭证(另请参见 构建选项)。如果仅设置用户,则指定的用户名也用于组。

worker_aio_requests#

语法

worker_aio_requests number;

默认值

worker_aio_requests 32;

上下文

events

在使用 aioepoll 连接处理方法时,设置单个工作进程的最大未完成异步 I/O 操作 number

worker_connections#

语法

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 允许自动将工作进程绑定到可用 CPU:

worker_processes auto;
worker_cpu_affinity auto;

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

worker_cpu_affinity auto 01010101;

重要

此指令仅在 FreeBSD 和 Linux 上可用。

worker_priority#

语法

worker_priority number;

默认值

worker_priority 0;

上下文

main

定义工作进程的调度优先级, 类似于 nice 命令: 负的 number 表示更高的优先级。 允许的范围通常从 -20 到 20。

示例:

worker_priority -10;

worker_processes#

语法

worker_processes number | auto;

默认值

worker_processes 1;

上下文

main

定义工作进程的数量。

最佳值取决于多种因素,包括 CPU 核心数、 硬盘驱动器数量和负载模式。 如果不确定,建议从可用 CPU 核心数开始。 值 auto 尝试自动检测最佳的工作进程数量。

worker_rlimit_core#

语法

worker_rlimit_core size;

默认值

上下文

main

更改工作进程的核心文件最大大小限制 (RLIMIT_CORE)。 这样可以在不重启主进程的情况下增加限制。

worker_rlimit_nofile#

语法

worker_rlimit_nofile number;

默认值

上下文

main

更改工作进程的最大打开文件数限制 (RLIMIT_NOFILE)。 这样可以在不重启主进程的情况下增加限制。

worker_shutdown_timeout#

语法

worker_shutdown_timeout time;

默认值

上下文

main

配置工作进程优雅关机的超时时间。 一旦 time 到期,Angie 将尝试关闭所有活动连接 以完成关机过程。

优雅关机是通过向主进程发送 QUIT 信号 来启动的,告诉工作进程 停止接受新连接,同时允许现有连接完成。 工作进程继续处理活动请求直到完成,然后它们 干净地退出。如果连接持续打开超过 worker_shutdown_timeout,Angie 将强制关闭这些 连接以完成关机。

working_directory#

语法

working_directory directory;

默认值

上下文

main

定义工作进程的当前工作目录。 这主要用于写入核心文件, 因此工作进程必须对指定的目录具有写权限。