nginx 的默认轮询策略在遇到后端宕机时,会自动将请求转发给其他健康的后端服务器。具体做法是 nginx 通过 http 状态码判断后端是否存活,一旦检测到连接失败或超时,就会将该节点标记为不可用,并在后续请求中跳过它。

如何配置自动剔除故障节点
要实现自动剔除,只需确保 upstream 块中未禁用健康检查机制。Nginx 默认开启此功能,当后端返回 502、504 或连接被拒绝时,Nginx 会暂时停止向该节点发送请求。可以通过设置 max_fails 和 fail_timeout 参数来精细控制这一行为。

upstream backend {
server 192.168.1.101:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.102:8080 max_fails=3 fail_timeout=30s;
}
上述配置表示如果某个后端在 30 秒内连续失败 3 次,Nginx 将在 30 秒内不再向其发送请求。这能有效防止请求堆积到已宕机的服务器上,同时给后端恢复留出时间。
轮询权重在故障转移中的表现
当部分后端宕机时,Nginx 的轮询算法会自动调整分发逻辑。原本按权重分配请求,但在节点失效后,剩余健康节点会承担更多流量。这种动态调整无需手动干预,但需注意权重配置对整体负载的影响。

upstream backend {
server 192.168.1.101:8080 weight=5;
server 192.168.1.102:8080 weight=1;
}
假设 101 节点宕机,所有请求将全部流向 102 节点。若 102 节点无法承受全部流量,可能导致其自身过载。因此,合理设置权重和故障阈值至关重要。
基于 max_fails 参数的具体影响
当 max_fails 设置为 0 时,Nginx 会忽略健康检查结果,始终尝试向该节点发送请求。这在某些特殊场景下可能有用,但通常不建议在生产环境中使用。











