1.worker_processes 工作进程

1.1阻塞和非阻塞网络模型
同步阻塞模型,当相求进程或者线程数量增加到一定程度后,性能会急剧下降,负载率不高。(不建议使用)
Nginx基于事件的非阻塞多路复用(epool或kquene)模型,一个进程在短时间内可以响应大量的请求。(建议使用)
1.2CPU个数
建议:小于等于cpu核心的数量,一般高于CPU数量会产生进程切换开销的负面影响。
worker_processes 2;

worker_cpu_affinity

2.1将work_process绑定到特定的CPU上,避免cpu间切换的开销。
2.2设置方法
2核CPU的配置
worker_cpu_affinity 01 10;
4核CPU的配置
worker_cpu_affinity 0001 0010 0100 1000;
8核CPU的配置
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 1000000;

worker_rlimit_nofile

一般设置为655350
每个进程最大打开文件描述符数量,linux系统上文件描述符比较广义:网络端口、设备、磁盘文件都是。文件描述符用完了,新的连接会被拒绝,产生502类错误。
Linux设置最大打开文件数可通过 ulimit -n 655350设置。

worker_rlimit_nofile 655350;

Events

4.1 worker_connections
并发响应能力的关键配置,每个进程允许的最大同时连接数=worker_connections * worker_processes
要注意的是这边最大同时连接数不等同于响应的用户数量,静态服务器最大连接数= worker_connections * worker_processes / 2
做反向代理服务器时,最大连接数=worker_connections * worker_processes / 4
worker_connections 10000;

4.2指定使用epoll或kquene
use epoll

http

5.1日志IO有关设置
关闭access_log日志,减小IO开销,但是就不会产生访问信息,不利于业务分析,不建议使用。
access_log off
至记录错误日志减小IO压力 
error_log logs/error.log crit
启用内核复制模式,保持开启达到最快IO效率 
sendfile on

缓存发送请求

文件下载及大数据包通信场景配置
tcp_nopush on
tcp_nodelay on 禁用Nagle算法
启动上述两个配置项,会在数据包达到一定大小后发送数据,这样会减少网络通信次数,降低阻塞概率,但会影响响应及时性。

最大连接时间

keepalive_timeout 30s;
HTTP1.1支持持久连接alive,降低每个连接的alive时间可以在一定程度上提高可响应连接数量,所以一般可适当降低此值.

内容压缩

开启内容压缩
gzip on
内容压缩长度设置,过短内容压缩效果不好,压缩过程还会浪费系统的资源
gzip_min_length 1000
内容压缩级别 1-9级,压缩级别越高压缩率越高,但对系统性能要求越高
gzip_comp_level 4
压缩的内容类别,多个使用空格隔开
gzip_types text/plain text/css application/json

静态文件缓存

open_file_cache max=655350 inactive=20s
最大缓存文件数量,文件未使用存活期
open_file_cache_valid 20s
验证缓存有效期时间间隔
open_file_cache_min_uses 2
有效期内文件最少使用次数