You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx负载均衡配置不生效 流量仅分发到单节点问题排查求助

Nginx负载均衡配置问题排查说明

配置基础正确性判定

你给出的负载均衡配置语法完全符合Nginx规范,默认启用*轮询(round-robin)*分发策略,正常场景下请求会依次分配给srv1.example.com、srv2.example.com、srv3.example.com三个节点。

问题根因与理解偏差纠正

你当前所有请求都转发到IP1(1号应用节点),以及对流量路由的预期存在偏差,核心原因如下:

  • 首先是逻辑理解偏差:只有请求打到Nginx监听的80端口时,才会触发负载均衡逻辑。如果你直接访问1号应用的服务端口(比如应用本身跑在非80的其他端口),请求不会经过Nginx负载均衡模块,自然只会路由到1号节点。
  • 节点可用性判定问题:Nginx会自动把请求转发给可用的上游节点,如果srv2.example.com、srv3.example.com出现DNS解析失败、端口不通、服务异常的情况,Nginx会自动剔除故障节点,把所有请求都转发给唯一可用的srv1.example.com。你可以在负载均衡服务器上执行curl srv2.example.com、curl srv3.example.com确认两个节点是否可以正常访问。
  • 长连接复用问题:如果用浏览器测试,浏览器会和Nginx建立长连接,同一个长连接内的所有请求都会转发到同一个上游节点,容易造成所有请求都到同一个节点的假象。你可以用命令行批量发起请求验证:
    for i in {1..10}; do curl http://<你的负载均衡服务IP>; done
    

配置优化建议

你可以在原有配置基础上补充健康检查、代理头配置,提升服务可用性:

upstream myapp1 {
    # 配置故障节点自动剔除规则:连续失败2次,30秒内不再转发请求到该节点
    server srv1.example.com max_fails=2 fail_timeout=30s;
    server srv2.example.com max_fails=2 fail_timeout=30s;
    server srv3.example.com max_fails=2 fail_timeout=30s;
}

server {
    listen 80;
    # 建议补充server_name,仅匹配指定域名的请求
    server_name your-service-domain.com;

    location / {
        proxy_pass http://myapp1;
        # 补充请求头,让上游应用能拿到真实客户端信息
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

内容的提问来源于stack exchange,提问作者Thahif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:06:02