当前位置: 首页 > 工具软件 > ngx-mask > 使用案例 >

Nginx 模块 - ngx_core_module

沈骞仕
2023-12-01

原文地址

示例配置

user www www;
worker_processes 2;

error_log /var/log/nginx-error.log info;

events {
    use kqueue;
    worker_connections 2048;
}

...

指令

accept_mutex

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

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

在支持 EPOLLEXCLUSIVE 的系统中,或者使用了 reuseport 时,不需要开启 accept_mutex
在 1.11.3 之前的版本,默认值是 on。

accept_mutex_delay

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

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

If accept_mutex is enabled, specifies the maximum time during which a worker process will try to restart accepting new connections if another worker process is currently accepting new connections.

daemon

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

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

debug_connection

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

对指定的客户连接,开启调试日志。其他连接会使用由 error_log 指令设置的日志等级。调试连接通过 IPv4 或 IPv6 地址指定,也可以通过 hostname 指定。对于使用了 UNIX socket 套接字的连接,调试日志用 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 构建时,这个指令才能工作,参考 A debugging log

debug_points

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

当探测到内部错误时(例如工作进程重启时 socket 套接字泄露),开启 debug_points 会导致核心文件创建(中止)或停止进程(停止),以便使用系统调试器进行进一步分析。

env

语法: 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 内部使用的,用户不应该直接设置。

error_log

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

Nginx 通过 --with-debug 构建时,debug logging 才能工作,参考 A debugging log
error_log 指令要用在 stream 上下文,需要使用 1.7.11 之后的版本。要用在 mail 上下文,需要使用 1.9.0 之后的版本。

events

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

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

include

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

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

示例:

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

load_module

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

加载动态模块。1.9.11 之后的版本才可用。

示例:

load_module modules/ngx_mail_module.so;

lock_file

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

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

master_process

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

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

multi_accept

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

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

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

pcre_jit

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

对配置解析时已知的正则表达式启用或禁用“即时编译(just-in-time compilation)”(PCRE JIT)。1.1.12 版本之后可用。

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

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

pid

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

定义用于储存主进程 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

定义命名线程池(named thread pools),用于多线程读取和发送文件而 不会阻塞 工作进程。1.7.11 之后可用。

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

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

timer_resolution

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

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

示例:

timer_resolution 100ms;

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

  • 如果使用 kqueue,则使用 EVFILT_TIMER 过滤器
  • 如果使用 eventport,timer_create()
  • 其他情况下,setitimer()

use

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

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

user

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

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

worker_aio_requests

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

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

worker_connections

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

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

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

worker_cpu_affinity

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

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

示例,将每个工作进程绑定到独立 CPU 上:

worker_processes    4;
worker_cpu_affinity 0001 0010 0100 1000;

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

worker_processes    2;
worker_cpu_affinity 0101 1010;

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

worker_processes auto;
worker_cpu_affinity auto;

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

worker_cpu_affinity auto 01010101;

这个指令仅在 Linux 和 FreeBSD 系统上可用。

worker_priority

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

定义工作进程的调度优先级,就像 nice 命令所做的那样:负数意味着更高的优先级。允许的范围通常在 -20 到 20 之间变化。

示例:

worker_priority -10;

worker_processes

语法: worker_processes number | auto;
默认值:    worker_processes 1;
上下文:    main

定义工作进程数量。

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

从版本 1.3.8 和 1.2.5 开始支持 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

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

这个指令从 1.11.11 之后可用。

working_directory

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

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

 类似资料: