ZBLOG

nginx负载均衡,上游有3台服务器,如果有1台挂了,nginx还会转发到这台吗

在Nginx负载均衡配置中,若上游(upstream)有一台服务器挂掉,默认情况下Nginx仍会尝试将请求转发到该故障服务器(可能导致请求失败)。但通过合理配置可以自动规避故障节点,以下是具体说明和解决方案:


1. 核心机制与配置

Nginx的负载均衡模块提供了健康检查机制,需手动配置才能实现自动剔除故障节点:

(1)被动健康检查(默认不开启)

upstream backend {
    server 192.168.1.101:80 max_fails=3 fail_timeout=30s;  # 允许失败3次后暂停30秒
    server 192.168.1.102:80;
    server 192.168.1.103:80;
}
  • max_fails: 允许的最大失败次数(默认1)。
  • fail_timeout: 失败后暂停转发的时间(默认10秒)。

⚠️ 注意:被动检查依赖实际请求的失败反馈,可能仍有短暂错误。

(2)主动健康检查(推荐方案)

需使用nginx-plus商业版或开源模块ngx_http_upstream_check_module

upstream backend {
    server 192.168.1.101:80;
    server 192.168.1.102:80;
    server 192.168.1.103:80;
    
    check interval=3000 rise=2 fall=3 timeout=2000 type=http;
    check_http_send "HEAD /health HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;
}
  • interval: 检查间隔(毫秒)。
  • rise/fall: 成功/失败阈值。
  • type: 检查协议(HTTP/TCP等)。

2. 替代方案

如果无法添加模块,可通过以下方式临时处理:

  • 手动下线节点:修改配置后重载Nginx。
  • 第三方工具:如Consul + Nginx动态更新Upstream。

3. 验证方法

查看Nginx状态接口或日志:

tail -f /var/log/nginx/error.log   # 观察错误日志
curl http://nginx-status           # 需要配置stub_status模块

总结

方案 适用场景 缺点
max_fails 简单场景 依赖真实请求失败
健康检查模块 高可用生产环境 需额外安装或商业版支持

建议根据业务需求选择合适方案。如果是生产环境,强烈建议启用主动健康检查。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23592

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?