什么是基本模块?
基本模块提供的指令允许你定义nginx基本功能的变量,在编译时它们不能被禁用,因此它们提供的指令和区段总是有效,有下面三个基本模块:
- 核心模块(core module)–基本特征和指令,例如进程管理和安全
- 事件模块(events module)–在nginx内部机制配置网络使用能力
- 配置模块(configuration module)–提供包含机制
nginx进程结构
nginx应用程序只是一个二进制文件(轻量级的后台进程),查看进程:
# ps fuax|grep nginx |
nginx的master进程的用户和用户组通常为root/root,master进程通常不处理任何客户端请求,master进程的主要工作是产生worker进程,worker进程以配置文件指定的用户和用户组运行,可以定义多个worker进程和每个worker进程的最大连接数。
核心模块指令
核心模块的大多数指令需要放在配置文件的根部,而且只能使用一次,有些指令只能在特定的环境当中使用。
指令和使用环境 | 语法和描述 |
---|---|
daemon | 值:on/off 语法: <daemon on;> 默认值:on |
env | 语法:env MY_VARIABLE; env MY_VARIABLE=my_value; 允许重定义环境变量 |
error_log(使用环境:main(根部)、http、server、location) | 语法: 路径:error_log /path; 默认值:logs/error.log error level级别:debug、info、notice、warn、error、crit(详细程度由高到底:debug提供全部日子记录,crit仅报告关键错误) 能够提供不同的错误日志级别:应用程序、HTTP服务、虚拟主机、虚拟主机目录 通过重定向,日志记录可以重定向到 /dev/null ,在配置文件根部禁用错误日志记录:error_log /dev/null crit; |
lock_file | 语法:文件路径:lock_file /path 默认值:在编译时定义 使用lock文件是为了互拆现象,默认不使用,除非在编译时已启用 |
log_not_found(使用环境:main、http、server、location) | 值:on(默认)/off 开启或禁用记录404错误,如果日志中填满了无法访问favicon.ico或robots.txt文件而产生的404错误,可以考虑将其关闭 |
master_process | 值:on(默认)/off 默认开启了master进程和woker进程,若禁用则只开启master进程,客户端无法连接服务器,该指令仅用于测试 |
pid | 语法: 文件路径:pid logs/nginx.pid 默认值:在编译时定义 用于配置nginx守护进程的pid文件路径 |
ssl_engine | 语法: 字符串:ssl_engine enginename; 默认值:无 enginename是一个系统的有效硬件SSL加速器,要检测有效的SSL加速器装置,可以在shell下使用命令: openssl engine -t |
thread_stack_size | 语法: thread_stack_size 1m; 默认值:none 定义线程堆栈大小,参考下面的worker_threads指令 |
timer_resolution | 语法: timer_resolution:100ms; 默认值:无 控制系统调用gettimeofday()时间间隔,它会调用该函数与系统内部时钟同步。如果这个值没有指定,在每一次内核事件通知后时钟都会被刷新 |
user | 语法: user username ; user username groupname; 默认值:在编译时定义,若未定义,则使用nginx的master进程的用户和用户组 该指令将允许你定义用户和组别,nginx的worker进程将使用这些设置运行 |
worker_threads | 语法: worker_threads 8; 默认值:无 为每一个worker进程定义一定数量的线程 警告:线程在默认情况下禁用 |
worker_cpu_affinity | 语法: worker_cpu_affinity 1000 0100 0010 0001; worker_cpu_affinity 10 10 01 01; worker_cpu_affinity ; 默认值:无 该指令与woker_processes协同工作,它可以让你的worker进程影响cpu内核,数字序列与worker进程一样多。 如果你配置nginx使用3个worker进程,那么就会有3个数字序列(可以理解为3个块),对于双核cpu,那么每一个块将会有两位数字,worker_cpu_affinity 01 01 10 1、第一块(01)指第一个worker进程会受第二个内核影响 2、第二块(01)指第二个worker进程会受第二个内核影响 3、第三块(10)指第三个worker进程会受第一个内核影响 注意:worker_cpu_affinity只建议针对多核处理器而非超线程处理器 语法:worker_cpu_affinity cpummask [cpumask] 默认值:无 说明:该选项仅适用于Linux,该选项允许你将worker进程绑定到一个CPU上,通过调用sched_setaffinity() 例如: worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000; 以上指令实现了将每一个进程绑定到一个cpu worker_processes 2;worker_cpu_affinity 0101 1010; 以上指令实现了将第一个worker进程绑定到cpu0/cpu2 第二个worker进程绑定到cpu1/cpu3 这适用于超线程(HTT)cpu |
worker_priority | 语法: worker_priority 0 默认值:0 定义worker进程优先级,从-20(最高级)到19(最低级),注意:内核进程运行在-5优先级,因此不推荐值设置为小于-5 |
worker_processes | 语法: worker_processes 4; 默认值:1 定义工作进程数量,nginx可以将请求的处理分到多个工作进程,如果属于cpu多核建议增加该值,如果一个进程由于慢的I/o操作被阻塞,那么进入的工作进程将转交给其他工作进程 注:根据负载自动调整worker进程设置:worker_processes auto; |
worker_rlimit_core | 语法: worker_rlimit_core 100m;默认值:无;定义每个woker进程的内核文件大小 |
worker_rlimit_nofile | 语法: worker_rlimit_nofile 10000; 默认值:无 定义一个worker进程可以同时处理的文件数量 |
worker_rlimit_sigpending | 语法: worker_rlimit_sigpending 10000 定义每个用户(调用进程的用户ID)能够被排入队列的信号(signal)数量,如果队列满,会由于这个限制导致信号被忽略 |
working_directory | 语法: 目录路径:working_directory /usr/local/nginx/ 默认值:在配置编译时通过prefix开关选项指定 这是worker进程的工作目录,仅用于定义内核文件位置。对于该目录,worker进程用户必须有写的权限 |
Events模块
Events模块提供的指令可以用来配置网络机制。
指令 | 描述 |
---|---|
accept_mutex | 值:on(默认)/off 控制是否接受使用互斥锁来打开套接字监听 |
accept_mutex_delay | 语法: accept_mutex_delay 500ms;(默认) 定义一个worker进程在再次获取资源之前应等待的时间。如果指令accept_mutex设置为off,则不使用该值 |
debug_connection | 语法: ip地址或CIDR段 对于匹配的ip地址或ip区段,需记忆详细的日志信息,这些信息存放在error_log指令指定的文件中 注意:为了使用该功能,在配置编译nginx时使用开关变量debug |
multi_accept | 语法: on/off(默认) 定义nginx是否立刻接受从所有监听队列进入的连接 |
use | 值:/dev/poll、epoll、eventport、kqueue、rtsig或select use kqueue 默认值:编译时定义 在有效的模型中选择event的模型类型(在编译时开启),但是nginx会自动选择最合适的一个。 1、select:默认的标准模块,如果OS不支持更有效的模型,则使用它(这种模型也是在windows下仅有的模型) 2、poll:在自动选择上优先与select,但在所有系统上都无效 3、kqueue:一种在FreeBSD1 4.1+、OpenBSD02.9+、NetBSD2.0、MacOS X下性能高效的模型 4、epoll:一种基于linux2.6+操作系统下有效的模型 5、rtsig:实时信号,对于linux2.2.19有效,但不适用于高流量情况,作为默认,系统设置仅允许1024个队列信号 |
/dev/poll | 一种用于Solaris 77 11/99+,HP/UX 11.22+,IRIX 6.5.15+和TRU64 UNIX5.1A+系统的高效模型 |
Eventport | 用于Solaris 10的一种高效模型,但需要安全补丁 |
worker_connections | 语法: worker_connections 定义一个worker进程能够同时连接的数量 |
Configuration模块
nginx的configuration模块是一个简单的模块,它提供的include指令能将其他文件包含在nginx的配置文件中,在配置文件的任何地方都可以使用该指令,并且后面只有一个参数–文件路径。
注意:文件路径若使用相对路径是相对于配置文件所在目录而言的。