Nginx轮询调度必须配合健康检查才能实现故障自动隔离,关键在于配置max_fails和fail_timeout启用被动检查,并通过proxy_next_upstream指定error、timeout及5xx状态触发重试,同时设置合理超时参数与keepalive连接复用以提升稳定性。

Nginx 负载均衡本身不保证后端响应质量,但可通过配置组合主动规避异常、减少无效请求、平衡连接压力,从而显著提升整体响应稳定性。
健康检查与故障自动隔离
轮询默认只在请求失败时被动标记节点,容易把新请求持续打到已卡顿的后端。必须显式设置 max_fails 和 fail_timeout:
– max_fails=2 表示 30 秒内连续 2 次失败(超时或返回 5xx)即剔除该节点
– fail_timeout=30s 既定义检测窗口,也控制屏蔽时长,到期后自动重试接入
示例:
upstream backend {
server 192.168.1.10:8080 max_fails=2 fail_timeout=30s;
server 192.168.1.11:8080 max_fails=2 fail_timeout=30s;
}连接复用与长连接优化
频繁建连会拖慢响应,尤其在高并发短请求场景。启用 keepalive 复用 Nginx 到后端的连接:
– keepalive 32 表示每个 worker 进程最多缓存 32 个空闲连接
– 必须配合 proxy_http_version 1.1 和 proxy_set_header Connection '' 才生效
这样可降低后端 TCP 握手开销,实测连接数减少约 70%,QPS 提升 35%。
调度策略适配实际负载特征
轮询在响应时间差异大时易失衡(如一台 20ms、另一台 500ms),导致慢节点积压请求:
– 短平快接口、服务器性能相近 → 用默认轮询
– 长连接、耗时操作多(如文件上传、WebSocket)→ 改用 least_conn
– 服务器配置差异明显(如 4C8G 与 8C16G 混用)→ 启用 weight 显式分配流量
请求级保护与上游容灾兜底
避免单点过载传导引发雪崩:
– 对关键路径(如 /api/)启用 limit_req 控制请求速率,防突发冲击
– 使用 proxy_next_upstream error timeout http_500 http_502 http_503,允许失败后自动换节点重试
– 配置 backup 节点,在所有主节点不可用时提供基础服务能力
不复杂但容易忽略


















