nginx 通过 upstream 块定义服务器组并配合 proxy_pass 实现负载均衡,支持轮询、加权轮询、least_conn、ip_hash 等策略,可配置 max_fails、backup 等增强可用性。

Nginx 通过 proxy_pass 本身不直接实现负载均衡,它只是把请求转发给后端服务器;真正的负载均衡由 upstream 块 定义的服务器组配合 proxy_pass 共同完成。
定义 upstream 服务器组
在 http 块中声明一个或多个 upstream 块,列出多个后端服务节点,Nginx 会按策略分发请求:
http {
upstream backend_servers {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
}
这样就创建了一个名为 backend_servers 的服务组,后续可在 proxy_pass 中引用。
在 location 中使用 proxy_pass 指向 upstream
在 server 块内配置 location,用 proxy_pass 指向 upstream 名称(注意末尾不加斜杠):
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_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;
}
}
此时所有匹配 / 的请求都会被轮询分发到 upstream 中的三个节点。
选择负载均衡策略
upstream 支持多种调度算法,通过参数指定:
- 轮询(默认):不加参数即启用,逐个分发请求
-
加权轮询:
server 192.168.1.10:8080 weight=3;,数字越大分配越多 -
最少连接:
least_conn;放在 upstream 块首行,优先发给当前连接数最少的节点 -
IP 哈希:
ip_hash;确保同一客户端 IP 总访问同一后端(适合有状态服务) -
URL 哈希:
hash $request_uri consistent;按请求路径哈希,适合静态资源缓存一致性
增强可用性与健康检查
生产环境建议添加容错机制:
-
max_fails=3 fail_timeout=30s;:某节点连续失败 3 次,30 秒内不再转发请求 -
backup;:标记为备用节点,仅当其他节点都不可用时才启用 -
down;:临时标记该节点下线(常用于维护) - Nginx 开源版无主动健康检查,需依赖被动检测(如 max_fails);商业版或 OpenResty 可配置主动探活
例如:
upstream backend_servers {
server 192.168.1.10:8080 weight=2 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080;
server 192.168.1.12:8080 backup;
}
不复杂但容易忽略:确保后端服务实际可访问、端口开放、响应正常;修改配置后执行 nginx -t 校验,再 nginx -s reload 生效。











