nginx负载均衡核心是upstream定义后端组并置于http块内,proxy_pass以http://名称形式引用;需透传host、x-real-ip等请求头,并通过nginx -t校验+reload生效。

Linux 下用 Nginx 实现负载均衡,核心就是 upstream 定义后端组 + proxy_pass 引用它。单独写 proxy_pass 指向 IP,只是反向代理;只有配合 upstream 块,才真正启用轮询、权重、健康检查等负载能力。
upstream 必须放在 http 块里
这是最常出错的地方。upstream 不能写在 server 或 location 里,否则 Nginx 启动会直接报错:nginx: [emerg] "upstream" directive is not allowed here。
- ✅ 正确位置:在 nginx.conf 的
http { ... }大括号内部 - ❌ 错误写法:把 upstream 塞进某个 server {} 里面
- 如果用 include 拆配置文件,确保被引入的文件内容也包裹在 http { } 中,而不是只有一段 upstream
proxy_pass 必须严格匹配 upstream 名称
location 中的 proxy_pass 不是随便填个名字就行,必须是 http://名称 形式,且名称要和 upstream 定义时完全一致(大小写敏感、无空格、无端口)。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- ✅ 正确示例:
upstream api_cluster { server 192.168.1.10:8080; }→proxy_pass http://api_cluster; - ❌ 错误写法:
proxy_pass http://api_cluster/;(末尾斜杠触发路径重写,易导致后端收不到预期路径) - ❌ 更隐蔽错误:
proxy_pass http://api_cluster:8080;(upstream 里没写端口时加 :8080,会触发 DNS 解析失败)
基础配置要带关键请求头透传
不加这些,后端看到的全是 Nginx 本机 IP,日志、限流、鉴权都会出问题。
-
proxy_set_header Host $host;—— 让后端知道原始访问域名 -
proxy_set_header X-Real-IP $remote_addr;—— 传递真实客户端 IP -
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;—— 补全多层代理下的 IP 链
验证和重载不能跳过
改完配置不是保存就生效,必须走标准运维流程:
- 先运行
sudo nginx -t检查语法,有错误会明确提示哪一行、什么问题 - 确认无误后执行
sudo systemctl reload nginx(或sudo nginx -s reload)平滑加载 - 访问服务,同时查看各后端 access.log,确认请求确实在几台机器间交替出现










