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

Nginx负载均衡配置异常:流量未按1:10权重分配求助

分析与解决Nginx负载均衡权重不生效的问题

首先得点明你遇到的核心问题:你使用的least_conn负载均衡算法,并不是单纯按照权重比例来分配流量的——它的逻辑是优先将请求分配给活跃连接数与权重比值最小的服务器,这和你预期的“10:1固定比例”是两回事。

为什么几乎所有流量都流向主服务器?

如果你的主服务器(192.168.x.xx)处理请求的速度足够快,请求完成后连接会迅速释放,那么它的活跃连接数会一直远低于从服务器。哪怕权重是10,计算活跃连接数/权重后的值仍然比从服务器小,Nginx就会持续把请求分配给主服务器,完全体现不出权重的比例。

一步步排查与解决

1. 先验证权重配置本身是否正常

先把负载均衡算法换成默认的round_robin(这是严格按照权重比例分配请求的算法),测试流量是否符合10:1的预期:

upstream backend {
    # 移除least_conn,使用默认的round_robin算法
    server 192.168.x.xx weight=10 max_fails=3 fail_timeout=5s;
    server 192.168.x.xy weight=1 max_fails=3 fail_timeout=10s;
}

重启Nginx后观察两台服务器的access log,如果流量比例接近10:1,说明你的权重配置本身没问题,问题出在least_conn算法的特性上。

2. 若必须使用least_conn,调整策略或排查从服务器状态

如果你业务确实需要基于连接数的负载均衡,那得理解它的计算逻辑:

  • 检查从服务器的响应速度:如果从服务器处理请求慢,导致连接长时间处于活跃状态,那活跃连接数/权重的值会很高,Nginx自然不会优先分配请求过去。可以对比两台服务器的响应时间,优化从服务器的性能。
  • 调整权重比例:如果主服务器性能远高于从服务器,可以适当降低主服务器的权重,或者提高从服务器的权重,让活跃连接数/权重的比值更均衡。

3. 排查从服务器是否被标记为不可用

看你的配置里,从服务器的fail_timeout是10s,主服务器是5s。如果从服务器之前出现过连续3次请求失败(max_fails=3),Nginx会在10s内将它标记为不可用,这期间所有流量都会流向主服务器。

  • 查看Nginx的error log,搜索从服务器的IP,看有没有connect() failed或upstream timed out之类的错误。
  • 在Nginx所在机器上,手动curl从服务器的80/443端口,确认从服务器是否正常可达,防火墙是否开放对应端口。

4. 启用Nginx状态模块辅助排查

如果还没启用,可以配置stub_status模块,直观查看upstream中每台服务器的连接数、请求数等状态:

server {
    listen 80;
    server_name status.somesite.somesub.org;
    location /nginx_status {
        stub_status on;
        allow 127.0.0.1;
        allow 192.168.x.xx; # 允许你的管理IP访问
        deny all;
    }
}

访问http://status.somesite.somesub.org/nginx_status,可以看到类似以下的信息,能帮你判断从服务器是否在正常接收请求:

Active connections: 291 
server accepts handled requests
 16630948 16630948 31070465 
Reading: 6 Writing: 179 Waiting: 106 

额外注意点

你的443端口的server配置没写完,记得补充完整SSL证书相关配置(ssl_certificate、ssl_certificate_key),否则HTTPS请求可能无法正常转发到后端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:46:04