以下以4核 CPU, 16G内存的机器为例



常规参数优化项



1. worker_processes
worker_processes用来设置Nginx服务的进程数。推荐是CPU内核数或者内核数的倍数,推荐使用CPU内核数,因为我的CPU为4核的,所以设置为4。

2. worker_cpu_affinity



1.该参数为nginx亲核参数,默认情况下,Nginx的多个进程有可能跑在某一个CPU或CPU的某一核上,导致Nginx进程使用硬件的资源不均,因此绑定Nginx进程到不同的CPU上是为了充分利用硬件的多CPU多核资源的目的。 2.worker_cpu_affinity用来为每个进程分配CPU的工作内核,参数有多个二进制值表示,每一组代表一个进程,每组中的每一位代表该进程使用CPU的情况,1代表使用,0代表不使用。所以我们使用 worker_cpu_affinity 0001 0010 0100 1000;来让进程分别绑定不同的核上。



3. worker_connections
1.设置一个进程理论允许的最大连接数,理论上越大越好,但不可以超过worker_rlimit_nofile的值。还有个问题,linux系统中有个指令open file resource  limit,它设置了进程可以打开的文件句柄数量,可以用下面的指令查看你的linux系统中open file resource limit指令的值,cat /proc/sys/fs/file-max
2.可以将该指令设置为23900251
3.echo "2390251" > /proc/sys/fs/file-max; sysctl -p



4. worker_rlimit_nofile
设置毎个进程的最大文件打开数。如果不设的话上限就是系统的ulimit –n的数字,一般为65535。



5. tcp_nopush
sendfile为on时这里也应该设为on,数据包会累积一下再一起传输,可以提高一些传输效率。



6. tcp_nodelay
1. 小的数据包不等待直接传输。默认为on。
2. 看上去是和tcp_nopush相反的功能,但是两边都为on时nginx也可以平衡这两个功能的使用。



7. keepalive_timeout
HTTP连接的持续时间。设的太长会使无用的线程变的太多。这个根据自己服务器访问数量、处理速度以及网络状况方面考虑。



8. send_timeout
设置Nginx服务器响应客户端的超时时间,这个超时时间只针对两个客户端和服务器建立连接后,某次活动之间的时间,如果这个时间后,客户端没有任何活动,Nginx服务器将关闭连接,将其设置为10s,Nginx与客户端建立连接后,某次会话中服务器等待客户端响应超过10s,就会自动关闭。



9. types_hash_max_size
types_hash_max_size影响散列表的冲突率。
types_hash_max_size越大,就会消耗更多的内存,但散列key的冲突率会降低,检索速度就更快。
types_hash_max_size越小,消耗的内存就越小,但散列key的冲突率可能上升。



10. client_header_buffer_size
该指令用于设置Nginx服务器允许的客户端请求头部的缓冲区大小,默认为1KB,此指令的赋值可以根据系统分页大小来设置,分页大小可以用以下命令获取getconf PAGESIZE。



11. client_max_body_size
客户端上传的body的最大值。超过最大值就会发生413(Request Entity Too Large)错误。默认为1m,最好根据自己的情况改大一点。



12. gzip on
启用gzip,对响应数据进行在线实时压缩,减少数据传输量。



13. nginx配置优化示例:
user nginx;
 pid /run/nginx.pid;
 worker_processes 4;
 worker_cpu_affinity 0001 0010 0100 1000;
 worker_rlimit_nofile 65535;
 events {
         use epoll;
         worker_connections 65535;
         accept_mutex off;
         multi_accept off;
 }
 http {
         ##
         # Basic Settings
         ##
         sendfile on;
         tcp_nopush on;
         tcp_nodelay on;
         keepalive_timeout 60 50;
         send_timeout 10s;
         types_hash_max_size 2048;
         client_header_buffer_size 4k;
         client_max_body_size 8m;
         include /etc/nginx/mime.types;
         default_type application/octet-stream;
         ##
         # Logging Settings
         ##
         access_log /var/log/nginx/access.log;
         error_log /var/log/nginx/error.log;
         ##
         # Gzip Settings
         ##
         gzip on;
         gzip_disable "msie6";
         gzip_min_length 1024;
         gzip_vary on;
         gzip_comp_level 2;
         gzip_buffers 32 4k;
         gunzip_static on;
         gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
         ##
         # Virtual Host Configs
         ##
         include /etc/nginx/conf.d/*.conf;
 }