Nginx负载均衡当其中一台服务器挂掉之后,Nginx负载将会怎样呢?

我们测试搭建一个简单的负载均衡,然后关闭其中一台再来访问,会发现我们的浏览器卡住一直转圈圈,过了很久才会显示结果。

由此我们可以得出结论Nginx负载的时候如果其中一台服务挂掉了,它会把请求转发到另一个可以提供服务的机器,其中这之间的超时等待默认是60s

我们可以通过这一个配置去改变这个时间(proxy_connect_timeout 定义与代理服务器建立连接的超时。请注意,此超时通常不能超过75秒。),比如我们可以把时间设置成1s,这样访问者就无感知了。(当然了这个时间有点极端,只是为了测试)

 1 worker_processes  1;
 2 
 3 events {
 4     worker_connections  1024;
 5 }
 6 
 7 
 8 http {
 9     include       mime.types;
10     default_type  application/octet-stream;
11 
12     sendfile        on;
13 
14     keepalive_timeout  65;
15 
16     upstream Tomcat{
17     server 127.0.0.1:8001;
18     server 127.0.0.1:8002;
19     }
20 
21     server {
22         listen      8888;
23         server_name  localhost;
24 
25         location / {
26             proxy_pass http://Tomcat;
27             #nginx当访问其中一台节点挂了,尝试连接另一台节点的时间间隔,这样访问者没有任何感知
28          proxy_connect_timeout 1s;
29         }
30         error_page   500 502 503 504  /50x.html;
31         location = /50x.html {
32             root   html;
33         }
34     }
35 
36 }

nginx里设置了两个节点服务器,一个8001端口、一个8002端口,其中8001端口服务正常,8002端口没有服务,当请求nginx时,会随机分配到这两个端口上访问,有人可能会有疑问,8002服务不通,访问到8002端口上的请求,会不会直接报404,那么我们测试下看看,

我们请求nginx服务器,刷新了多次,会有几次在这里转圈,但都没有报404,而是很快的出现了服务页面

转圈转了大概一秒左右,出现服务页面

 

 接下来我们看看Nginx的error日志,从下面截图中,我们可以看到,nginx已经分配到了8002服务上,而8002端口是不存在的,但前端页面只是停留了一秒左右又恢复正常,这个请求者可以说是无感知的。

 

好了,今天就测试到这,下面是一些nginx常用的其他配置,可以参考

 1 #允许客户端请求的最大单文件字节数
 2 client_max_body_size 10m; 
 3 
 4 #缓冲区代理缓冲用户端请求的最大字节数,
 5 client_body_buffer_size 128k;
 6 
 7 #nginx跟后端服务器连接超时时间(代理连接超时)
 8 proxy_connect_timeout 90;
 9 
10 #连接成功后,后端服务器响应时间(代理接收超时)
11 proxy_read_timeout 90;
12 
13 #设置代理服务器(nginx)保存用户头信息的缓冲区大小
14 proxy_buffer_size 4k;
15 
16 #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
17 proxy_buffers 32k;
18 
19 #高负荷下缓冲大小(proxy_buffers*220 proxy_busy_buffers_size 64k; 
21 
22 #设定缓存文件夹大小,大于这个值,将从upstream服务器传
23 proxy_temp_file_write_size 64k; 

 

posted @ 2022-04-30 22:59  勤快的懒羊羊  阅读(7494)  评论(0编辑  收藏  举报