nginx中weight参数仅在加权轮询策略下生效,定义后端服务器相对处理份额而非百分比,通过平滑加权轮询使长期流量趋近设定比例;未声明默认为1,weight=0临时下线且不触发健康检查,故障时剩余节点按归一化权重重分流量。

在反向代理中用 weight 参数做加权分配,本质是让性能强的机器多扛流量、弱的少接请求,不是简单“设个数字就完事”,得配合策略、避免冲突、验证效果。
明确 weight 只在特定负载均衡模式下生效
weight 不是万能开关——它只对加权轮询(weighted round-robin)起作用。Nginx 默认就是加权轮询,无需额外声明;Apache 则必须显式启用 lbmethod=byrequests 或 bytraffic 等支持权重的算法,bybusyness 这类动态算法会覆盖 weight 设置。
- Nginx:直接写
server ip:port weight=3;即可,weight 默认为 1 - Apache:必须用
balancer://协议 +BalancerMember+ProxySet lbmethod=byrequests - ip_hash、least_conn 等策略与 weight 互斥,开启后 weight 会被忽略
按比例算清实际流量分布
weight 是相对值,不是百分比。三台服务器配 weight=4、weight=1、weight=1,总权重为 6,对应理论流量占比约 66.7%、16.7%、16.7%,不是 4:1:1 的绝对次数比(因底层实现含随机因子),但长期统计趋近该比例。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 建议用整数,避免小数(如 1.5)——Nginx 和 Apache 都只接受整型 weight
- 权重差太大(如 100:1)可能导致低权服务器长期空闲,反而降低容错性
- 上线前用压测工具发千级请求,抓后端 access log 统计实际分发比
配套关键参数防止“权重失效”
光设 weight 不够,还得关掉干扰项:
- 禁用
stickysession(Apache)或ip_hash(Nginx),否则所有同源请求固定到一台,weight 形同虚设 - 调小
retry时间(Apache)或max_fails/fail_timeout(Nginx),避免某台短暂不可用就被长期剔除,打乱权重预期 - Nginx 中
proxy_pass http://upstream_name的地址必须严格匹配 upstream 块名,不能带http://或端口,否则当成普通域名直连,绕过权重逻辑
上线后必须验证权重是否真实生效
配置 reload 后别只看 Nginx/Apache 是否启动成功,要确认请求真按权重走:
- Nginx:访问
/nginx_status(需启用 stub_status)或用log_format记录 upstream_addr,再 grep 统计 - Apache:打开
/balancer-manager页面(需配置授权),实时查看各成员已处理请求数和当前权重占比 - 临时在后端加响应头
X-Upstream: server-01,用 curl -I 多次测试,观察分布是否符合预期










