ZBLOG

nginx上游有两个地址,一个地址不通自动转发到另外一个地址

在 Nginx 中,可以通过 upstream 模块配置多个上游服务器地址,并结合负载均衡策略(如 proxy_next_upstream)实现故障自动转移。以下是具体配置方法:


1. 基础配置示例

  1. http {
  2. upstream backend {
  3. server 192.168.1.100:8080; # 第一个上游地址
  4. server 192.168.1.101:8080; # 第二个上游地址(备用)
  5. # 可选:设置健康检查(Nginx Plus或开源版+lua模块)
  6. # max_fails=3 fail_timeout=30s;
  7. }
  8. server {
  9. listen 80;
  10. location / {
  11. proxy_pass http://backend;
  12. proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
  13. # 当第一个地址失败时(超时/5XX错误等),自动尝试下一个地址
  14. }
  15. }
  16. }

2. 关键参数说明

  • proxy_next_upstream
    指定何种情况下切换到下一个上游服务器,常用值:

    • error:连接错误
    • timeout:请求超时
    • http_500/http_502...:服务器返回特定状态码
  • max_fails & fail_timeout(可选)
    定义服务器不可用的阈值(需配合健康检查模块):

    1. server 192.168.1.100:8080 max_fails=3 fail_timeout=30s;

3. 高级场景

权重分配与优先级

  1. upstream backend {
  2. server 192.168.1.100:8080 weight=5; # 主节点,权重更高
  3. server 192.168.1.101:8080 backup; # 备份节点(仅当主节点全部失败时启用)
  4. }

TCP/UDP层故障转移

对于非HTTP协议(如数据库、gRPC),使用 stream 模块:

  1. stream {
  2. upstream db_backend {
  3. server db1.example.com:3306;
  4. server db2.example.com:3306 backup;
  5. }
  6. server {
  7. listen 3306;
  8. proxy_pass db_backend;
  9. proxy_timeout 3s;
  10. }
  11. }

4.验证方法

  • 手动测试:关闭第一个上游服务,观察请求是否自动切换到第二个地址。
  • 日志监控:检查Nginx错误日志(error_log /var/log/nginx/error.log warn;)。

注意事项

  • Nginx默认采用轮询策略,若需更智能的容灾(如心跳检测),建议使用商业版Nginx Plus或开源方案如OpenResty + Lua脚本。
  • Kubernetes环境中可结合Ingress Controller的注解实现类似功能。

如果有特殊需求(如长连接处理、自定义超时时间),可以进一步调整参数!


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?