nginx的weight参数通过相对整数比例实现按服务器真实处理能力分发请求,需结合cpu、内存、i/o或实测qps设定,必须置于upstream块内server指令中,配合健康检查与stub_status验证实际流量占比。

权重配置不是简单填个数字,而是让 Nginx 按服务器真实处理能力分发请求。它不看 CPU 使用率或响应时间,只依据你设定的相对数值做长期比例分配。
权重怎么设才匹配服务器性能
weight 是无量纲整数,代表相对服务能力,不是百分比,也不需要归一化到 100。关键在于找可比指标:
- CPU 核心总数(如双路 16 核设为 32,单路 4 核设为 4)
- 内存容量(若某节点内存翻倍且应用吃内存,weight 可相应翻倍)
- 磁盘 I/O 类型(SSD 节点比同配置 HDD 节点 weight 提高 1.5–2 倍)
- 实测稳定 QPS(压测得出各节点极限吞吐,按比例换算成整数 weight)
配置写法与生效位置
weight 只能写在 upstream 块内的 server 指令中,不能放在 location 或其他地方:
正确示例:
upstream backend {
server 192.168.1.10:8080 weight=4;
server 192.168.1.11:8080 weight=1;
server 192.168.1.12:8080 weight=2;
}
这个配置下,三台机器请求占比约为 4:1:2(即约 57%、14%、29%)。未写 weight 的 server 默认为 1。
光配 weight 不够,得加健康检查兜底
权重只在节点健康时起作用。一旦某台 server 因故障被标记为不可用,它的 weight 就暂停生效,剩余节点会按各自 weight 重新归一化分担流量。
- max_fails=2 fail_timeout=30s:连续失败 2 次后,30 秒内不再派请求
- slow_start=60s:刚恢复或新上线的节点,60 秒内权重从 0 渐进到设定值,防洪峰冲击
- backup:仅当所有非 backup 节点都不可用时才启用
- down:临时下线,不参与调度也不触发健康检查
怎么验证流量真按权重走了
别只看配置 reload 成功,要确认实际分发是否符合预期:
- 开启 stub_status 模块,访问 /nginx_status 查看各 server 的 requests 计数增长比
- 在 access_log 中加入 $upstream_addr 变量,统计日志里各后端 IP 出现频次
- 持续观察 5–10 分钟真实流量,偏差超过 ±10% 就要排查:是否有 sticky session 干扰、缓存代理透传问题、或后端主动 reset 连接











