Nginx 实现多服务器负载均衡需配置 upstream 定义后端组并用 proxy_pass 转发请求;支持轮询、加权轮询、ip_hash、least_conn 等策略;需设置 Host、X-Real-IP 等头信息,并通过 nginx -t 验证及日志观察分发效果。

Nginx 实现多服务器负载均衡,核心是通过 upstream 模块定义后端服务器组,并在 location 中用 proxy_pass 将请求转发过去。配置不复杂,但关键细节容易忽略。
定义 upstream 服务器组
在 http 块内声明一组后端服务,每台服务器用 server 指令指定地址和可选参数:
- 基础写法:直接列出 IP 和端口,如
server 192.168.1.101:8080; - 支持域名、Unix socket 路径、端口省略(默认 80)
- 可添加健康检查参数:
max_fails=3 fail_timeout=30s,连续失败 3 次后,30 秒内不再分发请求 - 标记备用节点:
backup,仅当其他服务器全部不可用时才启用 - 临时下线:
down,该节点不参与任何请求分发
选择合适的负载均衡策略
策略决定请求如何分发,不同场景适用不同方式:
-
轮询(默认):按顺序轮流分配,适合性能相近、无状态服务。无需额外指令,只要定义多个
server即可 -
加权轮询:给服务器设
weight值,比如server 192.168.1.101:8080 weight=3;,表示它承担约 3 倍于权重为 1 的流量 -
IP Hash:加一行
ip_hash;在upstream块开头,确保同一客户端 IP 总被路由到同一台后端,适用于需会话保持的场景(如登录态未存 Redis 时) -
最少连接:加
least_conn;,Nginx 会把新请求交给当前活跃连接数最少的服务器,适合长连接或响应时间差异大的服务
代理请求并传递真实信息
在 server 块中,用 proxy_pass 引用 upstream 名称,并补充必要头信息:
-
proxy_pass http://backend;(backend 是 upstream 名称) - 必须设置
proxy_set_header Host $host;,否则后端可能收不到原始 Host - 推荐加上
proxy_set_header X-Real-IP $remote_addr;和X-Forwarded-For,方便后端记录真实来源 - 若后端依赖协议或端口,还需传
X-Forwarded-Proto和X-Forwarded-Port
验证与基本调优
配置完别急着 reload,先检查语法再观察行为:
- 执行
nginx -t确认配置无误 - 用
curl或ab -n 100 -c 10 http://your-nginx/发起多次请求 - 查看各后端访问日志,确认请求是否按预期策略分发
- 模拟某台后端宕机(停服务),观察 Nginx 是否自动跳过它——这是健康检查生效的表现
- 生产环境建议开启
keepalive复用连接,减少 TCP 开销:upstream内加keepalive 32;,并在location中配proxy_http_version 1.1;和proxy_set_header Connection '';


















