香蕉云编原创发布日期:2019-6-21
我们访问很多网站的时候,发现很多网站打开速度极快,而自己编写的网站,每个页面打开都需要好几秒钟,但是加载的内容却不多,为什么会有这种情况呢?这就是今天要说的nginx调优。
nginx是目前最强大的前端高性能HTTP和反向代理web服务器,使用它,可以让静态文件直接输出,并且可以设置客户端缓存,也可以将负载均衡地分配给后端的服务。下面介绍nginx的优化方法:
首先,静态文件的分离,和设置客户端缓存是每个nginx学习者必须学会的。
location ~^/(images|Jquery)/ {
root /usr/local/tomcatxxx/webapps/ROOT/;
expires 60d;
}
location ~^/(css|js)/ {
root /usr/local/tomcatxxx/webapps/ROOT/;
expires 2d;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
上述代码就是静态文件nginx直接输出,接口和后端页面反向代理到后端的tomcat去处理;上述代码设置了images和Jquery目录下的文件缓存60天,第二次访问的时候,不再访问服务端,直接读取客户端的缓存(H5的webview也有缓存),这样用户第二次访问页面,就非常快了,很多静态的文件不需要去加载。
设置完静态文件分离,可以设置gzip压缩,在server的外级目录设置下面的代码:
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/javascript application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
这样就可以极大地减少文件输出的流量,减少客户端的下载流量,从而极限提速。
然后,我们可以设置后端tomcat的负载均衡,现在server的外层(和server配置同级)添加upstream,然后修改proxy_pass
upstream jiqun1 {
server 127.0.0.1:8080;
server 192.168.0.2:8080;
server 192.168.0.3:8080;
}
location / {
proxy_pass http://jiqun1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
这样,我们定义了三台tomcat服务器做后端服务,除了静态文件,就会让这三台服务器负载均衡处理。
设置nginx的进程数,比如4核处理器可以这样设置:
worker_processes 4;
nginx的连接处理机制在于不同的操作系统会采用不同的I/O模型,Linux下,nginx使用epoll的I/O多路复用模型,在freebsd使用kqueue的IO多路复用模型,在solaris使用/dev/pool方式的IO多路复用模型,在windows使用的icop等等。比如linux系统,我们设置如下:
events {
worker_connections 1024;
use epoll;
}
其中worker_connections为单个进程的客户端连接数
然后,我们设置最大打开文件数(最大打开文件数还受系统设置的最大打开文件数限制,要同时修改linux的最大打开文件数):
worker_rlimit_nofile 65535;