前言:大多数用户安装完nginx之后,就是通过简单的安装apt或者源码安装简单搭建了一个web服务器。但是要真正想迸发出nginx的性能,必须深入一些,本文将会对nginx进行一些调优,以更好的来适用于大量客户端访问时候的性能:

1.基本的优化:

基本配置我主要配置nginx.conf文件,其中包含nginx不同模块的所有设置,根据自己的安装路径寻找nginx.conf。

首先,设置全局设置,然后按照文件中的模块逐一优化,最后我会把优化过的配置文件传到最下面写到。

2.高级配置:

nginx.conf文件中,Nginx中有少数的几个高级配置在模块部分之上。

1.user  www-data;

2.pid  /var/run/nginx.pid

3.worker_processes auto;

4.work_rlimit_nefile 100000;

user和pid应该按默认设置即可。

worker_processes定义了nginx对外提供的web服务时候worker的进程数。最优值取决于很多因素。包括cpu核心的数控存储数据的硬盘数量以及负载模式。不能确定的时候,设置成(“auto”)自动让自动检测。

worker_rimit_nofile更改worker进程的最大打开文件数限制,如果没有设置好,这个值为操作系统的限制。设置好之后操作系统和nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”的问题了。

Events模块:

events模块中包含nginx中所有处理连接的设置:

events {
worker_connections  1024;

multis_accept on;

use epoll;

}

worker_connections设置可以一个由worker进程同时打开的最大连接数。如果设置了上面提到的worker_rimit_nofile,可以把这个数值设置更高,注意:最大的客户数量也是由系统的可用socket连接数限制(64k).所以设置最不实际的没用。

mylti_accept告诉nginx收到一个新的通知链接之后接受尽可能多的连接。

use设置用于复用客户端线程的轮查方法,如果你使用linux2.6x,应该使用epoll,如果使用BSD,应该使用kqueue。

http模块

http模块控制着nginx http处理的所有核心特性,因为这里只有很少的配置,所以我们只选择一小部分。所以这些设置都应该在http模块中,甚至你不会特别注意到这段配置。

  1. http {
  2. server_tokens off;
  3. sendfile on;
  4. tcp_nopush on;
  5. tcp_nodelay on;
  6. ...
  7. }


server_token 并不会让nginx执行的速度加快,但是可以关闭在报错时候显示的版本号。这个点是对安全性有好处的。

sendfile 可以让sendfile()发挥作用,sendfile()可以在磁盘和tcp socket之间相互拷贝数据。pre-sendfile是传输数据之前在用户空间申请缓存区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据磁盘读到OS缓存,因为这种拷贝是在内核完成的。sendfile()要比组合read()和write()以及打开丢弃缓冲更加有效。

tcp_nopush 告诉nginxz在一个数据包里发送所有的文件,而不一个接一个的发送。

tcp_nodelay告诉nginx不要缓存数据,而是一段一段的发送要需要及时发送的数据时候,就应该给应用设置这个属性,这样发送小块数据信息时候就不能立即得到返回值。

1.access_log off;

2.erro_log /var/log/nginx/erro.log crit;

access_log 设置nginx是否将存储访问日志,关闭这个选项可以让读取硬盘IO操作更快。

error_log 告诉nginx只要记录严重的错误即可。

1.keepalive_tineout 10;

2.client_header_timeout 10;

3.client_body_timeout 10;

4.reset_timeout_connection on;

5.send_timeout 10;

keepalive_timeout给客户端培训keep-alive链接超时时间,服务器将在这个超时时间过后关闭链接。这个可以设置低点让nginx持续的工作时间更长。

clent_header_timeout 和clent_body_timeout 设置请求头和请求体各自的超时时间,我们也可以把这个设置低点。

reset_timeout_connection 告诉nginx关闭不响应的客户端连接,这将会释放那个客户端占用的内容。很关键哦!

send_timeoout指定客户端的响应超时时间,这个设置不会用于整个转发器,而是在两次客户端读取操作之间,如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接。

1.limit_conn_zone $blinary_remote_addr zone=addr:5m;

2.limit)conn addr 100;

limit_conn_zone 设置用于保存各种key如当前的连接数的共享内存参数。5m就是5兆字节。这个值应该被设置的足够大以存储(32k*5/16*5) 大字节。

limit_conn 为给定key设置最大连接数,这里key是addr,这里设置100,也就是说允许每一个ip最多同事打开100个连接。

1.include /etc/nginx/mime.types;

2.default_type text/html;

3.charset UTF-8;

include 只是当前文件中包含另一个文件内容的指令,这里我们使他用来加载稍后用到一系列的MIME类型。

default_type 设置文件使用的默认mime-type。

charset设置头文件中默认的字符集。

  1. gzip on;
  2. gzip_disable "msie6";
  3. # gzip_static on;
  4. gzip_proxied any;
  5. gzip_min_length 1000;
  6. gzip_comp_level 4;
  7. gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;


gzip是告诉nginx采用gzip的压缩形式发送数据,这将会减少发送的数据量。

gzio_disable为指定的客户端禁止gzip工。

gzip_static告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。

gzip_proxied允许或者禁止压缩基于请求和香港的响应流,这里设置all,意味着压缩所有的请求。

gzip_min_length设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,最好不要压缩,这样会降低处理该请求的所有进程的速度。

gzip_type 设置需要压缩的数据格式,上面的例子中已经有一些了。

  1. # cache informations about file descriptors, frequently accessed files
  2. # can boost performance, but you need to test those values
  3. open_file_cache max=100000 inactive=20s;
  4. open_file_cache_valid 30s;
  5. open_file_cache_min_uses 2;
  6. open_file_cache_errors on;
  7. ##
  8. # Virtual Host Configs
  9. # aka our settings for specific servers
  10. ##
  11. include /etc/nginx/conf.d/*.conf;
  12. include /etc/nginx/sites-enabled/*;


open_file_cache打开缓存的同时也指定了缓存最大的数目,以及缓存的时间,可以设置一个         相对较高较长的时间,这样就可以在活动不超贵哦20ms后清除。

open_file_cache_min_uses定义了open_file_cache中指令参数不活动时间期间里最小的文件数。

open_file_cache_errors指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。包括了服务器的模块。这些是在不同的文件中定义的。如果服务器的模块你在这些文职,你就得修改这一行来指定正确位置。
完整优化过的nginx.conf配置文件。

  1. user www-data;
  2. pid /var/run/nginx.pid;
  3. worker_processes auto;
  4. worker_rlimit_nofile 100000;
  5. events {
  6. worker_connections 2048;
  7. multi_accept on;
  8. use epoll;
  9. }
  10. http {
  11. server_tokens off;
  12. sendfile on;
  13. tcp_nopush on;
  14. tcp_nodelay on;
  15. access_log off;
  16. error_log /var/log/nginx/error.log crit;
  17. keepalive_timeout 10;
  18. client_header_timeout 10;
  19. client_body_timeout 10;
  20. reset_timedout_connection on;
  21. send_timeout 10;
  22. limit_conn_zone $binary_remote_addr zone=addr:5m;
  23. limit_conn addr 100;
  24. include /etc/nginx/mime.types;
  25. default_type text/html;
  26. charset UTF-8;
  27. gzip on; http://www.mrliangqi.com/pack/conf/wp.conf
  28. gzip_disable “msie6”;
  29. gzip_proxied any;
  30. gzip_min_length 1000;
  31. gzip_comp_level 6;
  32. gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
  33. open_file_cache max=100000 inactive=20s;
  34. open_file_cache_valid 30s;
  35. open_file_cache_min_uses 2;
  36. open_file_cache_errors on;
  37. include /etc/nginx/conf.d/*.conf;
  38. include /etc/nginx/sites-enabled/*;
  39. }


附件有一份*.conf的配置文件/最后编辑完配置文件,重启nginx即可生效。

.conf配置文件下载:点击下载

发表评论

后才能评论