nginx权重配置通过upstream中server的weight参数实现按相对比例分发请求,如weight=3、1、2对应50%、16.7%、33.3%流量占比,需配合max_fails和fail_timeout等健康检查参数提升容错能力,并执行nginx -s reload生效。

Nginx 的权重配置是让负载更贴合实际硬件能力的关键手段。当后端节点性能不一致(比如 CPU 核心数、内存大小、磁盘 IO 差异明显),单纯轮询会导致强节点“吃不饱”、弱节点“扛不住”。用 weight 参数,就能按比例分配请求,让流量真正匹配算力。
权重配置的核心逻辑
权重值不是百分比,而是相对比例。Nginx 内部会把所有 weight 相加得出总权重,再按各节点权重占比分发请求。例如两个节点:weight=3 和 weight=1,总权重为 4,前者承担约 75% 请求,后者约 25%。
基础配置写法
在 upstream 块中为每个 server 指令添加 weight= 参数即可:
upstream app_cluster {
server 192.168.10.20:8080 weight=3;
server 192.168.10.21:8080 weight=1;
server 192.168.10.22:8080 weight=2;
}
这样三台服务器的请求分配比例就是 3:1:2,即约 50%、16.7%、33.3%。
搭配健康检查更可靠
权重本身不感知节点状态,需配合故障检测机制才能真正保障可用性:
-
max_fails=3:连续失败 3 次即标记为不可用 -
fail_timeout=30s:在此时间内失败达上限,该节点会被临时剔除 -
backup:可指定备用节点,仅当其他全部失效时启用
示例:
upstream app_cluster {
server 192.168.10.20:8080 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.10.21:8080 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.10.22:8080 weight=2 backup;
}
注意事项
- 权重只影响新请求的分发,不影响已建立的长连接
-
ip_hash和least_conn可与weight共存,但ip_hash下backup不生效 - 权重值建议用整数,避免小数带来的计算误差;通常从 1 起步,按性能倍数设(如新机器性能是旧机器的 2 倍,权重设为 2)
- 修改后必须重载 Nginx(
nginx -s reload),无需重启
权重不是万能解药,它解决的是“能力差异”,但无法替代监控和扩容决策。真正稳定的集群,需要权重 + 健康检查 + 日志分析三者协同。











