nginx基于权重的负载均衡通过upstream块中server指令的weight参数实现,按相对比例分发请求,需置于http块内、server块外,weight仅支持正整数且默认为1,配合max_fails和fail_timeout可提升容错能力。

直接在 upstream 块中为每台后端服务器设置 weight 整数值,Nginx 就会按权重比例分发请求——这不是“平均切分”,而是“按能力切分”。关键不在绝对数值大小,而在各节点权重之间的相对比例。
weight 的基本写法和位置要求
必须把 upstream 定义放在 http{} 块内、所有 server{} 外;weight 只能写在 server 指令后面,且不能和 backup、down 同时出现。
- 默认值是 1,不写
weight=就等同于weight=1 - 只支持正整数,不支持小数或百分比(如
weight=0.5或weight=50%是非法的) - 权重为 0 表示该节点不参与调度,等效于临时下线(但 Nginx 不报错)
怎么算出合理的权重比例
权重不是拍脑袋定的,要结合硬件实际能力和业务特征来估算。比如某台机器 CPU 核心数是另一台的 3 倍、内存大一倍、磁盘 I/O 能力强 50%,综合下来可初步设为 weight=3 和 weight=1。
- 总权重 = 所有
weight相加;单台占比 = 自身权重 ÷ 总权重 - 例如:
weight=3、weight=1、weight=2→ 总权重为 6 → 占比分别为 50%、16.7%、33.3% - 避免用过大的数(如 300:100:200),比例一致即可,小数字更易读、易调、易维护
配置生效前后的必要操作
改完配置不 reload,等于没改。Nginx 不会自动感知文件变化。
- 先执行
nginx -t校验语法是否正确 - 确认无误后运行
nginx -s reload热重载配置 - 压测或观察日志时,可通过
$upstream_addr字段确认请求是否落到预期节点
搭配健康检查提升稳定性
仅靠 weight 不足以应对故障。建议为每个 server 补充容错参数:
-
max_fails=3:连续失败 3 次就标记为不可用 -
fail_timeout=30s:30 秒内不向该节点转发新请求 -
slow_start=60s:恢复后逐步增加流量,避免冷启动冲击 -
backup:非主力节点可标为 backup,主节点全挂才启用











