指令(directive)控制了Nginx如何运行,Nginx在编译的时候控制哪个模块被加载,而各个模块都是由指令来配置的。
1.1 user
具有默认值nobody。控制worker process在哪个用户账号下运行。
user nginx;
1.2 worker_processes
默认值1,通常和CPU core数一致。控制Nginx派生出多少个worker process。可以设置为auto。让 Nginx自动检测cpu core数。
cpu相关信息查看:
逻辑CPU个数:
# cat /proc/cpuinfo | grep “processor” | wc -l
物理CPU个数:
# cat /proc/cpuinfo | grep “physical id” | sort | uniq | wc -l
每个物理CPU中Core的个数:
# cat /proc/cpuinfo | grep “cpu cores” | wc -l
```
worker_processes 1;
```
1.3 error_log
控制error log的位置及级别。可以在不同的Context设置。
日志可以有以下级别。
• info - Information
• notice - Notice
• warn - Warnings
• error - Error
• crit - Critical
• alert - High Alert
• emerg - Emergency
error_log /var/logs/error.log info;
1.4 pid
存贮PID的文件路径。
pid /var/run/nginx.pid;
包块在花括号{}之间,又叫Context指令。Context分为main, events, HTTP, server,
location, upstream, if, stream, mail等部分。
只能由一个Event Context,用于优化Nginx的行为。
2.1 worker_connections
一个worker进程能并发处理(发起)的最大连接数。
worker_connections 1024;
2.2 use
通常不需要设置。设置用于复用客户端线程的轮询方法。Nginx通常会在不同的操作系统自动设置不同的值,如果你使用Linux 2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue
use epoll;
2.3 multi_accept
如果multi_accept被禁止了,nginx一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接。如果nginx使用kqueue连接方法,那么这条指令会被忽略,因为这个方法会报告在等待被接受的新连接的数量
Syntax: multi_accept on | off;
Default: multi_accept off;
Context: events
2.4 accept_mutex
通常不要设置,值为on/off,默认为on。当一个新连接到达时,如果激活了accept_mutex,那么多个Worker将以串行方式来处理,其中有一个Worker会被唤醒,其他的Worker继续保持休眠状态;如果设置为off,那么所有的Worker都会被唤醒,但是只有一个Worker能获取新连接,其它的Worker会重新进入休眠状态。
accept_mutex on;
2.5 accept_mutex_delay
只有在accept_mutex激活的状态下起作用。当多个worker process轮流被唤醒去抢夺互斥锁的时候,这个参数即为最大等待时间。如果设置的时间过长,会导致某个worker process处理过多的请求,所以在并发大的情况下可以设置短一些,让其他的worker process也有机会接受请求。
含义:设置获得互斥锁的最少延迟时间。
语法:accpet_mutex_delay
缺省:500ms
示例:accpet_mutex_delay 1000ms;
3.1 include
引入其他文件的指令,例如以下引入了mime type和文件扩展名的mapping配置
include /etc/nginx/mine.types
3.2 default_type
如果在mine.type文件中找不到对应的mime type,则使用此配置,默认为application/octet-stream ,即下载文件。
default_type application/octet-stream;
3.3 log_format
ngx_http_log_module的log格式配置,第一个参数为格式的名字,例如main,第二个参数为一系列的变量名。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
3.4 access_log
http请求的log的位置和格式。
access_log logs/access.log main;
3.5 sendfile
使用操作系统功能SF_NODISKIO,加快数据到socket的传送速度。
sendfile on;
3.6 tcp_nopush
语法: tcp_nopush on | off;
默认值: tcp_nopush off;
上下文: http, server, location
开启或者关闭nginx在FreeBSD上使用TCP_NOPUSH套接字选项, 在Linux上使用TCP_CORK套接字选项。 选项仅在使用sendfile的时候才开启。 开启此选项允许
在Linux和FreeBSD 4.*上将响应头和正文的开始部分一起发送;
一次性发送整个文件。
关于sendfile,tcp_nopush以下文章讲得比较深入:
https://www.cnblogs.com/wajika/p/6573014.html
3.6 keepalive_timeout
一个请求完成之后还要保持连接多久,不是请求时间多久,目的是保持长连接,减少创建连接过程给系统带来的性能损耗,类似于线程池,数据库连接池
keepalive_timeout 65;
** 3.7 gzip**
是否启用压缩。
gzip on;