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在高并 ...
随机推荐
- Html标签替换(过滤掉html特殊符号)
/// <summary> /// 替换标签,把 <>" 替换为HTML标记 /// </summary> /// <param name=&quo ...
- Codeforces 475D 题解(二分查找+ST表)
题面: 传送门:http://codeforces.com/problemset/problem/475/D Given a sequence of integers a1, -, an and q ...
- Codeforces 1159F Winding polygonal line(叉积)
其实这个几何写起来还是比较方便,只用到了叉积.首先我们贪心的考虑一种情况,对于任意给定的LR串,我们起点的选择肯定是在这些点围成的凸包端点上,对于这样的起点来说,他对于L或者R都是有选择的机会,而且一 ...
- Webpack4、iView、Vue开发环境的搭建
导读 项目使用了 yarn ,一个快速.可靠.安全的依赖管理工具.yarn 是一个类似于npm的包管理工具,它是由 facebook 推出并开源,它在速度,离线模式,版本控制的方面具有独到的优势.此项 ...
- c++知识点总结3
http://akaedu.github.io/book/ week1 引用:相当于变量的别名.下面r和n就相当于同一回事 ; int &r=n; 引用做函数参数: void swap(int ...
- ASP.NET @URL帮助类
原文: https://www.cnblogs.com/bobo-show/p/5746389.html https://www.cnblogs.com/zhuji/p/7698057.html ...
- 通过express来打造api服务器
通过express来打造api服务器[ 后端接口 ] 1.步骤 1.通过脚手架创建项目 const express = require('express'); const router = expre ...
- frontend-dev面试
1.笔试题 vuex 存储的数据为null或者undefined是为啥? 1.伸缩布局 flex规则 2.横向布局的实现方法有多少? 3.说一说 flex:1; 的含义 / 说一说flex:1 1 3 ...
- 阿里开源框架-JarsLink-【JAVA的模块化开发框架】
JarsLink (原名Titan) 是一个基于JAVA的模块化开发框架,它提供在运行时动态加载模块(一个JAR包).卸载模块和模块间调用的API. 需求背景 应用拆分的多或少都有问题.多则维护成本高 ...
- Form表单的主要Content-Type
在Spa单页面横行的时代,前后端交互基本都是Json交互(也有通过FormData的,比如上传文件).而在之前的Jsp,Php前后不分家的时候,前后交互好大一部分都是通过Form表单来完成的.From ...