Nginx 模块 - ngx_core_module
- 示例配置
- 指令
- accept_mutex
- accept_mutex_delay
- daemon
- debug_connection
- debug_points
- env
- error_log
- events
- include
- load_module
- lock_file
- master_process
- multi_accept
- pcre_jit
- pid
- ssl_engine
- thread_pool
- timer_resolution
- use
- user
- 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 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
定义工作进程的当前工作目录。主要用于编写核心文件,在这种情况下,工作进程应该具有指定目录的写入权限。
Nginx 模块 - ngx_core_module的更多相关文章
- 结合源码看nginx-1.4.0之nginx模块组织结构详解
目录 0. 摘要 1. nginx模块组织结构 2. nginx模块数据结构 3. nginx模块初始化 4. 一个简单的http模块 5. 小结 6. 参考资料 0. 摘要 nginx有五大优点:模 ...
- 解剖Nginx·模块开发篇(2)ngx_http_hello_world_module 模块基本结构定义
elloWorld 是一个典型的 location 模块.什么是 location 模块?在 Nginx 中,根据作用域,有 main 模块.server 模块.location 模块. 1 模块定义 ...
- nginx 模块简介
nginx模块一般分为5类:核心模块.标准http模块.可选http模块.邮件服务模块.第三方模块. 其中核心模块和标准http模块在快速编译之后就包含在了nginx中. 主要看一下核心模块.标准ht ...
- nginx源代码分析--nginx模块解析
nginx的模块很之多.能够觉得全部代码都是以模块的形式组织.这包含核心模块和功能模块,针对不同的应用场合.并不是全部的功能模块都要被用到,附录A给出的是默认configure(即简单的httpser ...
- 【转】Nginx模块开发入门
转自: http://kb.cnblogs.com/page/98352/ 结论:对Nginx模块开发入门做了一个helloworld的示例,简单易懂.也有一定的深度.值得一看. Nginx模块开发入 ...
- Nginx模块开发入门
前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...
- Nginx模块fastcgi_cache的几个注意点 转
Nginx模块fastcgi_cache的几个注意点 去年年底,我对nginx的fastcgi_cache进行摸索使用.在我的测试过程中,发现一些wiki以及网络上没被提到的注意点,这里分享一下. ...
- 开发Nginx模块
开发Nginx模块 前面的哪些话 关于Nginx模块开发的博客资料,网上很多,很多.但是,每篇博客都只提要点,无法"step by step"照着做,对于初次接触Nginx开发的同 ...
- [转] Nginx模块开发入门
前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...
随机推荐
- Oracle数据库控制台常用命令
安装好数据库以后可以通过“Win+R”打开控制台,在控制台登录Oracle输入命令来操作数据库. SQLPlus命令: SQLPlus命令是用来登录Oracle数据库的命令,有两种写法,分别如下: ( ...
- HDU 4549题解 & luogu【模板】矩阵加速(数列)
M斐波那契数列 此题对数学基础要求较高 来源矩阵乘法_百度百科 一个m*n的矩阵是一个由m行n列元素排成的矩形阵列.矩阵里的元素可以是数字符号或者数学式. 形如[acbd][abcd]的数表称为二阶矩 ...
- Linux快速访问多个目录
Linux下实现多个目录之间快速切换 dirs -v # 显示栈目录dirs -c # 清空栈目录 pushd # 加入当前目录pushd director # 加入指定目录pushd +/-i ...
- 二分查找---有序数组的 Single Element
有序数组的 Single Element 540. Single Element in a Sorted Array (Medium) Input: [1, 1, 2, 3, 3, 4, 4, 8, ...
- MIT 6.824学习笔记4 Lab1
现在我们准备做第一个作业Lab1啦 wjk大神也在做6.824,可以参考大神的笔记https://github.com/zzzyyyxxxmmm/MIT6824_Distribute_System P ...
- 高端编程之DOM
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- OPECV的配置
因为要做一点道路是别的东西,所以想用到OPENCV的一些东西.在网上找了一些OPENCCSHARP的代码,但是这方面的书籍或者资料还是不是特别的多,所以我就觉得可能还不是很好.主要的原因还是因为自己的 ...
- Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法
一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强…” 什么是面 ...
- Array数组的使用
public class ArrayDemo { public static void main(String[] args) { int[] arr = {13,44,55,667,67,78}; ...
- 使用Tabulator遇到的问题
1.Tabulator好像是不支持ie,按照Tabulator文档引入,打开浏览器总是报缺少文件,换了谷歌果然好了. 2.编辑某一行的数据 代码: //Build Tabulator var tabl ...