降低慢机器权重需基于P95响应时间设定合理比例(如4:1),配合健康检查自动隔离,并验证分流效果、响应时长及错误率,必要时通过脚本实现动态调权与回滚。

降低慢机器的权重不是“调小一个数字”那么简单,而是让 Nginx 把更少请求打到响应迟缓的节点上,从而避免拖累整体平均响应时间。关键在于:权重调整必须有依据、有反馈、有兜底,否则可能适得其反。
权重下调必须基于可测的响应延迟指标
不能凭感觉把“看起来慢”的机器 weight 改成 1。真正有效的依据是后端真实处理耗时,尤其是 P95 或 P90 响应时间($upstream_response_time):
- 用 Nginx access_log 记录每个请求的 $upstream_response_time,再用日志分析工具(如 awk、goaccess 或 ELK)统计各 server 的分位值
- 假设 A 节点 P95=120ms,B 节点 P95=480ms,则 B 的响应速度约为 A 的 1/4 → 初始权重可设为 A:4、B:1
- 避免极端比例(如 10:1),建议最大权重比控制在 4:1 以内,否则低权重节点可能长期闲置,失去容错能力
单靠降权不够,必须搭配健康检查自动隔离
即使把慢节点 weight 设为 1,只要它还能响应 HTTP 200,Nginx 就仍会持续派发请求——这会让平均响应时间继续恶化。必须启用主动探测机制:
- 在 upstream 中为每个 server 配置 max_fails=2 fail_timeout=15s,让短时高延迟或超时触发临时剔除
- 使用轻量健康接口(如 /health?ready=1),配合 health_check interval=3s fails=2 passes=3(需 OpenResty 或 Nginx Plus)
- 注意:开源版 Nginx 不支持原生 health_check 指令,可用第三方 check_module 或脚本轮询 + 自动更新配置实现等效效果
降权后要验证实际分流效果和响应质量
改完权重不等于问题解决,必须盯住三项真实指标:
- 各节点的 $request_number 是否在数百次请求后趋近设定比例(例如 weight=3 和 weight=1 应接近 75% : 25%)
- 各节点的 $upstream_response_time 是否同步下降,而非仅流量减少但单请求仍慢(说明瓶颈在应用层,非负载分配问题)
- 错误率($upstream_status ≥ 500)是否因降权后剩余节点过载而上升,若出现则需扩容或重新校准权重
进阶:用脚本实现按响应时间自动降权
静态权重无法适应业务波动。可通过外部脚本实现闭环调控:
- 每 5 分钟采集各后端最近 5 分钟的平均 $upstream_response_time(从 Prometheus 或日志聚合结果中获取)
- 响应时间超过阈值(如 300ms)且持续 2 个周期,自动将其 weight 减半(最低设为 1),并写入新 upstream 配置文件
- 执行 nginx -t && nginx -s reload 安全生效;reload 前务必备份原配置,失败时可快速回滚
- 恢复逻辑同样重要:当该节点 P95 连续 5 分钟 ≤ 150ms,自动将其权重逐步回升至初始值


















