5 Nginx使用问题汇总

1.nginx故障转移

故障转移:在nginx负载均衡配置里,如果转发到某台服务器的请求失败,nginx会自动转发到其它服务器上重试。故障转移与请求类型有关,GET请求会自动转发重试。POST、PUT等请求,如果已经发送到某台服务器并且处理异常,不会再转发;如果连接不上服务器,nginx会转发到其它服务器上处理。所以不要用GET请求做一下插入、更新业务,否则会出现问题。

http{
    #应用集群负载均衡
    upstream com.zhujn.hot {
        #两个tomcat,weight:权重
        server 192.168.1.100:8081 weight=3;
        server 192.168.1.101:8081 weight=2;
    }

    server {   #虚拟服务器,默认端口:80
        proxy_read_timeout 10s;
        proxy_next_upstream error timeout; #故障转移条件
        proxy_next_upstream_tries 3;   #重试次数,防止大集群里无限重试
        proxy_next_upstream_timeout 60s;   #重试的最长时间

        location / {
            #反向代理,指向负载均衡配置名称
            proxy_pass http://com.zhujn.hot
        }
    }
}    

2.雪崩

在多台服务器负载均衡的高并发场景下,由于nginx故障转移的特性,假设某台服务器1万个请求里有3000个请求处理失败,nginx会把这3000个请求均分到其它服务器,如果在把其它服务器压挂了,nginx会把出问题的机器上的请求再转发到余下的服务器,从而引发滚雪球效应,导致整个集群崩溃。

解决方法:加入熔断机制,配置如下。

upstream com.zhujn.hot {
        #max_fails
        server 192.168.1.100:8081 max_fails=10 fail_timeout=60s;
        server 192.168.1.101:8081 max_fails=10 fail_timeout=60s;
    }
原文地址:https://www.cnblogs.com/jvStarBlog/p/12702004.html