nginx通过upstream模块与proxy_pass实现七层负载均衡,支持轮询、加权轮询、ip_hash、least_conn等算法,并可配置健康检查、备用节点及请求头透传以保障稳定性与可观测性。

定义后端服务器池(upstream)
在 `http` 块中声明一个命名的上游组,列出所有可提供服务的后端地址:例如:
upstream app_servers {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
每行 server 指令代表一个后端节点,支持 IP+端口、域名、Unix socket 等形式。
选择合适的负载均衡算法
Nginx 内置多种调度策略,根据业务特性选用:- 轮询(默认):顺序分发,适合后端性能相近、无状态服务
-
加权轮询(weight):如
server 192.168.1.10:8080 weight=3;,让高性能机器承担更多流量 - ip_hash:启用该指令后,同一客户端 IP 始终路由到同一后端,用于会话保持
- least_conn:优先选当前活跃连接最少的服务器,适合长连接场景(如 WebSocket)
配置反向代理转发
在 `server` 块中,用 `location` 匹配请求路径,并通过 `proxy_pass` 指向 upstream 名称:例如:
server {
listen 80;
location / {
proxy_pass http://app_servers;
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 设置确保后端能获取真实客户端信息,避免日志或鉴权异常。
增强稳定性与可观测性
- 添加 backup 标记备用节点:
server 192.168.1.13:8080 backup;,仅当其他节点全部不可用时启用 - 设置健康检查参数:
max_fails=3 fail_timeout=30s;,连续失败3次后,30秒内不再向该节点转发请求 - 使用 down 临时下线某节点:
server 192.168.1.10:8080 down;,无需注释配置即可生效











