Nginx业务负载均衡核心是upstream定义后端池+proxy_pass转发,需在http块中声明upstream、server块中配置proxy_pass指向其名称,并透传Host/X-Real-IP等关键头;漏任一环节将导致502或路由错误。

在 Nginx 中实现业务负载均衡,核心是通过 upstream 模块定义后端服务器池,并结合 proxy_pass 将请求转发过去。它不是“配置 Nginx 实现 Nginx 负载均衡”,而是用 Nginx 作为反向代理,把流量分发到多个业务服务器(如 Tomcat、Spring Boot 应用等),从而达成业务层面的负载平衡。
明确 upstream 服务器组
在 http 块中定义一个命名的后端服务组,每台业务服务器以 server 指令加入:
- IP 或域名 + 端口必须可访问(例如
192.168.1.100:8080) - 可附加状态标记:
down(临时下线)、backup(仅主节点失效时启用) - 支持健康检查参数,如
max_fails=3 fail_timeout=30s,连续失败 3 次后暂停 30 秒
示例:
upstream my_app {server 192.168.1.100:8080 max_fails=2 fail_timeout=15s;
server 192.168.1.101:8080 backup;
}
选择适合业务的分发策略
不同业务场景需要匹配不同的调度算法:
- 轮询(默认):适合无状态、性能相近的服务,无需额外配置
-
加权轮询(weight):新旧服务器混用或 CPU/内存差异大时,按能力分配流量,如
server 192.168.1.100:8080 weight=3 - ip_hash:需保持会话(如登录态未存 Redis 时),确保同一用户始终打到同一台后端
- least_conn:长连接类业务(如 WebSocket、HTTP/2 流),优先派发给当前连接数最少的节点
配置反向代理并透传关键信息
在 server 块的 location 中调用 upstream,并设置必要头字段:
-
proxy_pass http://my_app—— 关键转发指令 -
proxy_set_header Host $host—— 保留原始 Host,避免后端路由错乱 -
proxy_set_header X-Real-IP $remote_addr—— 传递真实客户端 IP -
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for—— 支持多层代理链路追踪 - 建议开启
proxy_http_version 1.1和proxy_set_header Connection "",利于 HTTP/1.1 keepalive 复用
验证与上线前检查
配置完成后不能直接 reload,需逐项确认:
- 运行
nginx -t检查语法是否正确 - 确认后端服务已启动且端口监听正常(
netstat -tuln | grep :8080) - 用 curl 或浏览器反复访问,观察响应头中的
Server或日志输出,确认请求确实轮转到了不同机器 - 模拟某台后端宕机(如 kill -9 进程),观察 Nginx 是否自动跳过该节点,不报 502











