nginx通过upstream中server指令的weight参数实现按相对能力分发流量,必须写在http块内upstream中server行末尾、不可与backup/down共存,未配置则默认为1;权重值应基于硬件性能或实测qps按比例设定,并需搭配max_fails、fail_timeout等参数实现健康检查与故障隔离。

直接用 weight 参数就能让 Nginx 按服务器实际能力分发流量,避免新机器空转、老机器扛不住——关键不是填数字,而是填对比例。
weight 怎么写才有效
它只能出现在 upstream 块里的 server 行末尾,不能和 backup、down 同时用。没写 weight 的服务器,默认值是 1。
- 配置示例:
upstream app {server 192.168.1.10:8080 weight=4;server 192.168.1.11:8080 weight=2;-
server 192.168.1.12:8080;← 这台等同于weight=1 }
三台服务器的理论请求占比约为 4:2:1(即约 57%、29%、14%),Nginx 内部会自动归一化计算,不用换算成百分比或强求总和为 100。
weight 值怎么定才靠谱
别凭感觉拍脑袋,得结合硬件和实测数据看相对服务能力:
- CPU 核心数:双路 16 核可设为 32,单路 4 核设为 4
- 内存容量:若某节点内存翻倍且应用吃内存,weight 可相应提高
- 磁盘类型:SSD 节点比 HDD 节点 weight 多给 1.5–2 倍
- 压测 QPS:用 wrk 或 ab 测出各节点稳定承载上限,按比例折算 weight
比如一台新服务器压测稳在 3000 QPS,旧服务器只能撑住 1200 QPS,那 weight 可设为 5 和 2(3000:1200 ≈ 5:2)。
光配 weight 不够,还得防单点故障
权重再准,服务器挂了也没用。建议搭配这些参数一起用:
-
max_fails=2 fail_timeout=30s:连续失败 2 次,30 秒内不再派请求过去 -
slow_start=60s:刚恢复或新加的节点,60 秒内权重从 0 逐步升到设定值,防洪峰冲击 -
backup:标为备用机,只在其他全不可用时启用 -
down:临时下线某节点,不参与调度(适合维护时用)
完整一行可写成:server 192.168.1.10:8080 weight=4 max_fails=2 fail_timeout=30s slow_start=60s;
转发请求时别漏掉 proxy_pass 引用
定义好 upstream 后,必须在 server 块里用 proxy_pass 指向它,名称要严格一致(区分大小写):
location / {-
proxy_pass http://app;← 必须带http://前缀,且名称与 upstream 名完全匹配 proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
如果写成 proxy_pass http://APP; 或 proxy_pass app;,Nginx 会报错或转发失败。











