在 nginx 的 upstream 模块中,加权轮询通过 weight 参数配置,语法为 server ip:port weight=n;。默认权重为 1,数值越大该服务器被分配到的请求越多。例如设置 weight=3 和 weight=1,前者获得的流量比例约为后者的三倍。

如何配置不同权重的服务器节点
直接在 upstream 块内的 server 指令后添加 weight 属性即可生效。Nginx 会根据所有节点的权重总和计算概率,权重高的节点优先处理请求。这种配置适用于后端服务器性能不一致的场景,确保高性能机器承担更多负载。

http {
upstream backend_pool {
server 192.168.1.10:8080 weight=5;
server 192.168.1.11:8080 weight=1;
}
server {
listen 80;
location / {
proxy_pass http://backend_pool;
}
}
}
上述配置中,192.168.1.10 的权重为 5,192.168.1.11 的权重为 1。总权重为 6,因此 192.168.1.10 大约接收 5/6 的请求,而 192.168.1.11 仅接收 1/6 的请求。重启或重载 Nginx 配置后生效。
权重配置对负载均衡策略的影响
当使用加权轮询时,Nginx 会维护一个虚拟的轮询队列,根据权重将同一台服务器连续加入多次。这意味着请求是近似均匀分布的,但在小样本下可能不完全符合比例。如果某台服务器宕机,Nginx 会自动将其从池中移除,剩余服务器的权重比例会重新计算。

# 模拟请求分发逻辑(伪代码)
weights = { 'A': 5, 'B': 1 }
total_weight = sum(weights.values()) # 6
# A 被选中概率: 5/6
# B 被选中概率: 1/1
在实际运行中,可以通过查看 Nginx 访问日志来验证权重效果。统计各后端 IP 的处理请求数,长期来看应接近配置的权重比。若发现负载不均,检查是否有健康检查失败导致节点被剔除,或调整权重值以匹配实际处理能力。
当某台服务器返回错误时如何处理
如果配置了权重的服务器在处理请求时返回 502、504 等错误,Nginx 默认会将请求转发给下一台服务器。此时,虽然该服务器仍保留在 upstream 中,但其实际有效权重会降低。可以通过 max_fails 和 fail_timeout 参数配合 weight 使用,实现更精细的高可用控制。











