Nginx通过upstream模块定义服务器组并配合proxy_pass实现负载均衡,支持轮询、加权轮询、ip_hash、least_conn四种策略,可配置健康检查、backup节点及容错参数,语法检查后需平滑重载生效。

Nginx 实现后端集群负载均衡,核心是靠 upstream 模块定义服务器组,并配合 proxy_pass 完成请求分发。它不依赖外部组件,开箱即用,配置简洁但逻辑清晰。
关键结构只有两部分:
-
upstream块(在http范围内)——定义后端服务器列表及调度策略 -
location中的proxy_pass——把流量引向这个 upstream 名称
下面按实际使用场景分几类说明:
基础轮询(默认策略)
适合后端服务性能接近、无状态、响应快的情况。
upstream myapp {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}Nginx 自动按顺序轮流转发请求。某台宕机时,会在 max_fails 和 fail_timeout 控制下临时剔除(默认 10 秒内失败 1 次就标记不可用)。
加权轮询(应对性能差异)
给高配机器设更高 weight,比如 3:1 分流:
upstream myapp {
server 192.168.1.101:8080 weight=3;
server 192.168.1.102:8080 weight=1;
}总权重为 4,前者承担约 75% 流量。注意:weight 只在轮询基础上起作用,不能和 ip_hash 或 least_conn 共存。
IP 哈希(保障会话粘性)
同一客户端 IP 始终打到同一台后端,解决登录态、购物车等有状态场景:
upstream myapp {
ip_hash;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}⚠️ 注意:ip_hash 不支持 backup 和 weight;如果客户端走代理(如公司出口 NAT),可能所有请求都哈希到一台,需结合 X-Forwarded-For 处理。
最少连接(适合长连接或耗时差异大)
新请求优先交给当前活跃连接数最少的后端:
upstream myapp {
least_conn;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}比轮询更动态,对 WebSocket、文件上传等长连接业务更友好。
健康检查与容错增强(每台 server 可单独配置)
upstream myapp {
server 192.168.1.101:8080 weight=2 max_fails=3 fail_timeout=30s;
server 192.168.1.102:8080 backup; # 仅当其他全挂时启用
}-
max_fails=3 fail_timeout=30s:30 秒内连续失败 3 次,就暂停该节点 30 秒 -
backup:作为热备节点,平时不参与分流 - 还可加
down标记永久下线,或slow_start=30s避免重启后流量突增
配置完成后别忘了:
- 检查语法:
sudo nginx -t - 平滑重载:
sudo systemctl reload nginx(不中断现有连接)
不复杂但容易忽略细节。


















