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*2) 20 proxy_busy_buffers_size 64k; 21 22 #设定缓存文件夹大小,大于这个值,将从upstream服务器传 23 proxy_temp_file_write_size 64k;
原创文章,转载请说明出处,谢谢合作