进程

Nginx是由master进程去启动worker进程来并行处理消息,适当的增加进程数可以加快Nginx的处理速度

  1. worker_processes 1; # 指定 Nginx 要开启的进程数,结尾的数字就是进程的个数,可以为 auto

优化使用的CPU

默认情况下,Nginx的多个进程可能运行在同一个CPU核上,导致Nginx进程使用硬件的资源不均。可以指定进程分配到指定的CPU核上处理,充分有效利用硬件

  1. worker_processes 4;
  2. worker_cpu_affinity 0001 0010 0100 1000;
  3. # worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
  4. # worker_cpu_affinity auto

其中worker_cpu_affinity 就是配置Nginx进程与CPU 亲和度的参数,即把不同的进程分给不同的CPU核处理。

单进程允许的客户端最大连接数

通过调整控制连接数的参数来调整Nginx单个进程允许的客户端最大连接数

  1. events {
  2. worker_connections 20480; # 默认1024
  3. }

进程的最大连接数也受Linux系统进程的最大打开文件数限制,可以使用 ulimit -HSn 65535或配置内核生效

  1. # /etc/sysctl.conf
  2. # 修改最大打开文件描述符数,建议修改为655360或者更高
  3. fs.file-max=65535

进程也是去监听文件描述符的状态来了解是否有连接进入,如果最大打开文件描述符较小,进程可以监听的io也少

配置获取更多连接数

默认情况下,Nginx进程只会在一个时刻接收一个新的连接,我们可以配置multi_accepton,实现在一个时刻内可以接受多个连接,提高处理效率

  1. events {
  2. multi_accept on;
  3. }

优化域名散列表大小

  1. http {
  2. server_names_hash_bucket_size 128;
  3. }

设置存放域名的最大散列表的存储桶大小,默认值依赖CPU的缓存

通过词进行索引缓存,比如缓存www, www.baidu, www.baidu.com

TCP优化

  1. http {
  2. sendfile on;
  3. tcp_nopush on;
  4. keepalive_timeout 120;
  5. tcp_nodelay on;
  6. }

sendfile 可以提高Nginx的静态资源托管效率,它是一个系统调用,直接在内核空间完成文件发送,不需要先readwrite,没有上下文切换的开销

TCP_NODELAY 是一个socket选项,禁用Nagle算法,尽快发送数据,可以节约时间

优化连接参数

  1. http {
  2. client_header_buffer_size 32k;
  3. large_client_header_buffers 4 32k;
  4. client_max_body_size 1024m;
  5. client_body_buffer_size 10m;
  6. }

主要根据业务场景来决定,比如client_max_body_size用来决定请求体的大小,用来限制上传文件的大小等。

配置压缩优化

可以将代码、图片、文本等进行压缩然后上传,加快读取速度

  1. http {
  2. gzip on;
  3. #该指令用于开启或关闭gzip模块(on/off)
  4. gzip_buffers 16 8k;
  5. #设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。16 8k代表以8k为单位,安装原始数据大小以8k为单位的16倍申请内存
  6. gzip_comp_level 6;
  7. #gzip压缩比,数值范围是1-9,1压缩比最小但处理速度最快,9压缩比最大但处理速度最慢
  8. gzip_http_version 1.1;
  9. #识别http的协议版本
  10. gzip_min_length 256;
  11. #设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压 缩。这里我设置了为256
  12. gzip_proxied any;
  13. #这里设置无论header头是怎么样,都是无条件启用压缩
  14. gzip_vary on;
  15. #在http header中添加Vary: Accept-Encoding ,给代理服务器用的
  16. gzip_types
  17. text/xml application/xml application/atom+xml application/rss+xml application/ xhtml+xml image/svg+xml
  18. text/javascript application/javascript application/x-javascript
  19. text/x-json application/json application/x-web-app-manifest+json
  20. text/css text/plain text/x-component
  21. font/opentype font/ttf application/x-font-ttf application/vnd.ms-fontobject
  22. image/x-icon;
  23. #进行压缩的文件类型,这里特别添加了对字体的文件类型
  24. gzip_disable "MSIE [1-6]\.(?!.*SV1)";
  25. #禁用IE 6 gzip
  26. }