一、配置详解
- daemon:是否以守护进程的方式运行nginx
daemon on | off ,默认值为on; - master_process:是否以master/worker方式工作
master_process on | off ,默认值为on;
在大多数情况下nginx还是以master进程管理多个worker进程的方式运行的,关闭了master_process之后nginx将以master进程来处理请求
- error_log:日志的设置; 格式: /path/file level, 默认值为error_log logs/error.log error;
- /path/file参数为一个具体的文件。
- level的值可为:debug,info,notice,warn,error,crit,alert,emerg。
- level的级别从左往右级别依次增大,当设定一个级别时,大于或等于改级别的日志都会被输出到path/file文件中,小于该级别的日志则不会输出。
- env:定义环境变量
env VAR | VAR=VALUE
这项配置能够让用户直接设置操作系统上的环境变量。 - include:嵌入其他配置文件
include配置能够将其他配置文件嵌入到当前的nginx.conf中,他的参数可以是绝对路径,也可以是相对路径(相对路径主目录为nginx.conf所在目录)。 - pid:配置pid文件的路径( path/file)
pid文件保存着master进程id。该文件会直接影响nginx的服务运行。 - user:nginx worker进程运行的用户及用户组
user username [groupname],默认值为nobody;
user用于配置master进程启动后,fork出的worker进程运行在哪个用户和用户组下。 - worker_rlimit_nofile:指定nginx进程可以打开的最大文件个数。
worker_rlimit_nofile limit; - worker_process:nginx的worker进程数,默认值1;
在master/worker运行的方式下,定义worker进程的个数。worker进程的数量直接影响性能。worker进程的配置与我们的实际业务需求有关,每个worker进程都是单线程的进程,他们会调用各个模块以实现多种多样的功能。如果能够确定这些模块不会出现阻塞的调用,那么有多少CPU内核就应该配置多少个进程;反之,如果可能出现阻塞式调用,那么需要配置稍多一些的worker进程。多个worker进程能够充分利用多核系统架构,但若worker进程的数量多于CPU内核数,那么会增大进程间的切换带来的消耗。
- worker_cpu_affinity:绑定nginx worker进程到指定的cpu内核。
worker_cpu_affinity cpumask;
worker_process 4; #开启4个进程
#2核cpu,开启4个进程
worker_cpu_affinity 01 10 01 10;
#4核cpu,开启4个进程
worker_cpu_affinity 1000 0100 0010 0001;
为什么一定需要绑定CPU内核?假设每个worker进程都是非常繁忙的,如果多个worker进程都在抢同一个CPU,那么这就会出现同步问题。反之如果每个进程都是独享一个CPU,就在内核调度策略上实现了完全的并发。
- ssl_engine device:硬件加速
如果服务器上有ssl硬件加速设备,那么就可以进行配置以加快ssl协议的处理速度,可以通过OpenSSLengine
-t命令查看是否具备ssl硬件加速设备
- worker_priority: nginx进程的优先级设置(指明worker进程的nice值)
worker_priority nice;默认值为0; - accept_mutex:是否打开accept锁
accept_mutex on | off,默认值为on;
accept_mutex是nginx的负载均衡锁,accept_mutex这把锁可以让多个worker进程轮流的,序列化的与新的客户端建立tcp连接。当某一个worker进程建立的连接数量达到worker_connections配置的最大连接数的7/8时,会大大地减小这个worker进程试图建立新tcp连接的机会,以此实现所有worker进程之上处理的客户端请求数量接近。
- lock_file:lock文件的路径
lock_file path/file,默认值:lock_file logs/nginx.lock;
accept锁需要这个文件,如果accept锁关闭,lock_file配置完全不生效。 - accept_mutex_delay
使用accept锁后到真正建立连接之间的延迟时间,默认:accept_mutex_delay 500ms;
在使用accept锁后,同一时间只有一个worker进程能够取到accept锁。这个accept锁不是阻塞锁,如果取不到会立刻返回。如果有一个worker进程试图取accept锁而没有取到,它至少要等accept_mutex_delay定义的时间间隔后才能再次试图取锁。
- multi_accept: 批量建立新连接
multi_accept[on]off],默认: multi_accept off,
当事件模型通知有新连接时,尽可能地对本次调度中客户端发起的所有TCP请求都建立连接。
- use: 选择事件模型
use[ kqueue]rtsiglepoll/dev/pollselectpollleventport];默认:Nginx会自动使用最适合的事件模型。
对于Linux操作系统来说,可供选择的事件驱动模型有poll、select、epoll三种。epoll当然是性能最高的一种,epoll可以处理大并发连接。
- worker_connections:每个worker的最大连接数
worker_connections number;
定义每个worker进程可以同时处理的最大连接数。 - 全局变量
$args 变量中存放了请求URL中的请求指令。比如
http:/www.xxxx.com/index/index?argl=valuel&arg2=value2中的“argl=valuel&arg2=value2”
$content_length 变量中存放了请求头中的Content-length字段
$content_type 变量中存放了请求头中的Content-type字段
$document_root 变量中存放了针对当前请求的根路径
$document_uri 变量中存放了请求中的当前URI,并且不包括请求指令,比如 http://www.xxxx.com/index/index?argl-value1&arg2-value2中的“/index/index
$host 变量中存放了请求URL中的主机部分字段、比如http://www.xxxx.com/index中的"“www.xxxx.com”。如果请求中 的主机部分字段不可用或者为空,则存放Nginx配置中该server块中
server_name指令的配置值
$http_user_agent 变量中存放客户端的代理信息
$http_cookie变量中存放客户端的cookie信息
$limit_rate 变量中存放Nginx服务器对网络连接速率的限制,也就是Nginx 配置中 limit_rate指令的配置值
$remote_addr 变量中存放了客户端的地址
$remote_port 变量中存放了客户端与服务器建立连接的端口号
$remote_user 变量中存放了客户端的用户名
$request_body_file变量中存放了发给后端服务器的本地文件资源的名称
$request_method 变量中存放了客户端的请求方式,如""GET”、“POST等
$request_filename 变量中存放了当前请求的资源文件的路径名
$request_uri 变量中存放了当前请求的URI,并且带请求指令
$query_string 与变量Sargs含义相同
$scheme变量中存放了客户端请求使用的协议,比如“http”、“https”和“ftp”等
$server_protocol变量中存放了客户端请求协议的版本,比如“HTTP1.0”、"HTTP/1.1”等
$server_addr 变量中存放了服务器的地址
$server_name 变量中存放了客户端请求到达的服务器的名称
$server _port 变量中存放了客户端请求到达的服务器的端口号
document_uri含义相同