upstream块必须置于nginx.conf的http{}内且在所有include之前;仅支持轮询、least_conn、ip_hash等策略,proxy_pass须指向upstream名称并配健康检查参数。

必须把 upstream 块写在 http 作用域内
upstream 定义不能出现在 server 或 location 块里,否则 Nginx 启动会直接报错。宝塔面板的站点配置文件(如 /www/server/panel/vhost/nginx/xxx.conf)只允许单目标反向代理,不支持多节点负载逻辑。正确位置是主配置文件 /www/server/nginx/conf/nginx.conf 的 http { } 块开头部分,建议加在所有 include 语句之前。例如:
http {
include mime.types;
default_type application/octet-stream;
upstream my_cluster {
server 192.168.1.10:8080 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 weight=1;
server 127.0.0.1:8081 backup;
}
include /www/server/panel/vhost/nginx/*.conf;
}
选择合适的负载均衡策略
不同业务场景适用不同调度方式,Nginx 默认使用轮询(round-robin),但需按需显式启用其他策略:
- least_conn:适合长连接或响应时间差异大的后端,添加在 upstream 块首行,如 upstream my_cluster { least_conn; server ...; }
- ip_hash:保障同一客户端 IP 始终落到同一台后端,适用于有状态服务(如依赖本地 session 的应用),注意它会削弱负载分散效果
- weight:按后端性能分配权重,比如高性能机器设为 weight=5,普通机器保持默认 1
- 避免混用 ip_hash 和 weight,Nginx 不支持两者共存
proxy_pass 必须指向 upstream 名称
站点配置中若仍写 proxy_pass http://192.168.1.10:8080;,则 upstream 完全无效。必须严格匹配名称,且带 http:// 前缀:
location / {
proxy_pass http://my_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
名称大小写、拼写必须与 upstream 块定义完全一致;$host 而非 $http_host,防止后端解析出错或 HTTPS 跳转异常。
加入故障转移与健康检查参数
仅列 IP 不够,要让 Nginx 主动识别并规避故障节点:
- max_fails=3 fail_timeout=30s:30 秒内连续失败 3 次,该节点被标记为不可用,30 秒后自动重试
- backup:仅当所有非 backup 节点都不可用时才启用,适合灾备服务器
- down:手动下线某节点,不参与任何调度
- 配合 proxy_next_upstream error timeout http_502 http_503 http_504,让 Nginx 在遇到这些响应时自动转发给下一节点











