nginx反向代理后端集群配置核心是定义upstream服务器组并在location中引用;需在http块内声明upstream(如backend_cluster),配置server节点及weight/max_fails/fail_timeout等参数,再通过proxy_pass http://backend_cluster/转发请求,并设置proxy_set_header和超时参数以保障真实上下文传递与高可用。

配置 Nginx 反向代理后端集群,核心是两步:定义后端服务器组(upstream),再在 location 中引用它。这不是单纯转发,而是让多个服务协同对外提供能力,同时具备自动容错和流量分摊能力。
定义 upstream 服务器组
把所有后端节点集中管理,便于扩展和健康检查:
- 用
upstream块声明一个逻辑名称(如backend_cluster),放在http块内(不能在server内) - 每个
server行写一个后端地址,支持 IP+端口、域名或 Unix socket;可加weight控制权重,max_fails和fail_timeout启用被动健康检查 - 推荐搭配
least_conn或ip_hash策略:least_conn适合响应时间波动大的服务,ip_hash适合需会话保持的场景(如登录态)
在 location 中启用代理并传递关键信息
把请求真正转发出去,并确保后端能拿到真实上下文:
-
proxy_pass http://backend_cluster/;—— 注意末尾斜杠,它决定路径是否截断(/api/→/) - 必须设置
proxy_set_header四项:Host、X-Real-IP、X-Forwarded-For、X-Forwarded-Proto,否则后端可能取不到原始域名、客户端 IP 或协议类型 - 加上超时控制:
proxy_connect_timeout(建连)、proxy_send_timeout(发请求)、proxy_read_timeout(等响应),避免长阻塞拖垮 Nginx
让集群更可靠:自动剔除故障节点
Nginx 默认只做轮询,挂掉的机器还会被继续转发。要真正实现高可用,得靠健康检查:
- 被动检查:靠
max_fails=3 fail_timeout=30s实现——连续失败 3 次,30 秒内不再转发请求过去 - 主动检查(需商业版或 OpenResty):用
health_check指令定期 GET 一个健康接口(如/health),失败则标记为 down - 配合
proxy_next_upstream error timeout http_500,当后端返回错误或超时时,自动重试下一个节点
验证与上线前必做三件事
配置写完不等于跑通,得验证链路是否闭环:
- 运行
sudo nginx -t检查语法,别跳过这步——90% 的部署问题出在配置格式错误 - 用
curl -I http://localhost/api/test测试代理是否生效,看响应头中Server是否还是 Nginx,X-Upstream-Addr(如有自定义)是否指向某台后端 - 手动停掉一台后端服务,观察请求是否自动切到其余节点,且无明显报错或超时











