前言:大多数用户安装完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模块中,甚至你不会特别注意到这段配置。
- http {
- server_tokens off;
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- ...
- }
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设置头文件中默认的字符集。
- gzip on;
- gzip_disable "msie6";
- # gzip_static on;
- gzip_proxied any;
- gzip_min_length 1000;
- gzip_comp_level 4;
- 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 设置需要压缩的数据格式,上面的例子中已经有一些了。
- # cache informations about file descriptors, frequently accessed files
- # can boost performance, but you need to test those values
- open_file_cache max=100000 inactive=20s;
- open_file_cache_valid 30s;
- open_file_cache_min_uses 2;
- open_file_cache_errors on;
- ##
- # Virtual Host Configs
- # aka our settings for specific servers
- ##
- include /etc/nginx/conf.d/*.conf;
- include /etc/nginx/sites-enabled/*;
open_file_cache打开缓存的同时也指定了缓存最大的数目,以及缓存的时间,可以设置一个 相对较高较长的时间,这样就可以在活动不超贵哦20ms后清除。
open_file_cache_min_uses定义了open_file_cache中指令参数不活动时间期间里最小的文件数。
open_file_cache_errors指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。包括了服务器的模块。这些是在不同的文件中定义的。如果服务器的模块你在这些文职,你就得修改这一行来指定正确位置。
完整优化过的nginx.conf配置文件。
- user www-data;
- pid /var/run/nginx.pid;
- worker_processes auto;
- worker_rlimit_nofile 100000;
- events {
- worker_connections 2048;
- multi_accept on;
- use epoll;
- }
- http {
- server_tokens off;
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- access_log off;
- error_log /var/log/nginx/error.log crit;
- keepalive_timeout 10;
- client_header_timeout 10;
- client_body_timeout 10;
- reset_timedout_connection on;
- send_timeout 10;
- limit_conn_zone $binary_remote_addr zone=addr:5m;
- limit_conn addr 100;
- include /etc/nginx/mime.types;
- default_type text/html;
- charset UTF-8;
- gzip on; http://www.mrliangqi.com/pack/conf/wp.conf
- gzip_disable “msie6”;
- gzip_proxied any;
- gzip_min_length 1000;
- gzip_comp_level 6;
- gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
- open_file_cache max=100000 inactive=20s;
- open_file_cache_valid 30s;
- open_file_cache_min_uses 2;
- open_file_cache_errors on;
- include /etc/nginx/conf.d/*.conf;
- include /etc/nginx/sites-enabled/*;
- }
附件有一份*.conf的配置文件/最后编辑完配置文件,重启nginx即可生效。
.conf配置文件下载:点击下载