nginx静态分离、负载均衡和调优

香蕉云编原创发布日期: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;

在线客服