要实现云服务器算力平配,需在http块顶层配置upstream并设weight值映射性能(如8C16G设weight=4),搭配max_fails和fail_timeout健康检查,禁用ip_hash等冲突策略。

要让不同规格的云服务器在 Nginx 中实现算力平配,核心不是“平均分配请求”,而是让每台机器承担与其实际处理能力相匹配的负载——即按性能加权分配,避免高配机器闲置、低配机器过载。
权重配置必须放在 http 块顶层
upstream 块不能写在 server 或 location 里,否则 Nginx 启动会报错或权重不生效。正确位置是主配置文件(如 /etc/nginx/nginx.conf)的 http { } 块内,且建议放在所有 include 语句之前:
- 错误写法:
server { upstream myapp { ... } } - 正确写法:
http { upstream my_backend { ... } server { ... } }
用 weight 精准映射服务器算力差异
weight 值代表相对处理能力,无需归一化,Nginx 自动按比例分发。例如:
- 一台 8C16G 云服务器设为
weight=4 - 一台 4C8G 设为
weight=2 - 一台 2C4G 设为
weight=1 - 那么三者分别承担约 57%、29%、14% 的请求流量
数值可参考 CPU 核心数 × 内存 GB 数粗略估算,再结合压测微调。不建议用小数,只用正整数更稳定。
搭配健康检查防止算力被故障节点拖累
仅靠 weight 无法应对临时宕机或响应变慢。每个 server 行应叠加 max_fails 和 fail_timeout:
-
max_fails=3:连续 3 次连接超时或拒绝,标记为不可用 -
fail_timeout=30s:30 秒内不再转发请求,之后自动试探恢复 - 高性能节点可放宽(如
max_fails=4 fail_timeout=45s),低配节点可更敏感
这样既尊重算力权重,又确保故障时不把流量硬塞给已失联的机器。
避免策略冲突,确保权重真正生效
以下配置会直接让 weight 失效,务必避开:
- 混用
ip_hash或hash $request_uri:Nginx 明确禁止与 weight 共存 -
proxy_pass写成具体地址(如http://192.168.1.10:8080):必须写成http://my_backend - upstream 名称大小写或拼写与
proxy_pass不一致
若需会话保持,改用 proxy_cookie_path 或后端透传 token,而非依赖 ip_hash。


















