nginx负载均衡通过健康检查、max_fails/fail_timeout阈值、max_conns限流、least_conn或weight调度及backup/down机制,间接防止后端过载。

启用主动健康检查与自动故障隔离
Nginx 默认仅在请求时做被动探测(即“请求失败才标记不可用”),这容易导致连续失败请求打到已卡顿的后端。需结合 `max_fails` 和 `fail_timeout` 实现轻量级主动规避:– max_fails=2:表示在 fail_timeout 时间窗内,连续 2 次请求失败即标记为不可用
– fail_timeout=30s:既定义检测窗口,也指定该节点被屏蔽时长(30 秒后自动重试)
– 实际示例:server 192.168.1.10:8080 max_fails=2 fail_timeout=30s;
注意:Nginx 原生不支持周期性 TCP/HTTP 探活(如 HAProxy 的 health_check),但可通过配合 `proxy_next_upstream error timeout http_500` 在 proxy_pass 阶段增强容错。
限制单台后端的最大并发连接数
避免某台性能较弱或资源受限的服务器被过度调度:– 使用 max_conns 参数硬性约束活跃连接上限
– 示例:server 192.168.1.11:8080 weight=1 max_conns=200;
– 当该节点已有 200 个未关闭连接时,Nginx 将跳过它,转而选择其他可用节点
– 此参数需搭配 keepalive 和上游服务的连接管理协同使用,否则可能被忽略
按能力分配流量,避免“平均主义”失衡
轮询(round-robin)在服务器配置差异大时会加剧不均衡。应显式设置权重,并优先考虑 least_conn 策略:– weight 适用于 CPU/内存明显不同的场景(如 4C8G 与 8C16G 机器混用)
– least_conn 更适合长连接、耗时接口多的业务(如 WebSocket、文件上传)
– 配置方式:upstream app { least_conn; server a:8080; server b:8080; }
– 注意:least_conn 不等于“瞬时连接最少”,而是 Nginx 维护的当前活跃连接数(基于 proxy_pass 建立的 upstream 连接)
配置备用节点与平滑下线机制
提前规避风险,而非等崩溃后再响应:– backup:定义热备节点,仅当所有主节点不可用时启用(适合灾备)
– down:主动标记维护中节点,Nginx 完全跳过调度(无需重启,reload 即生效)
– 示例:server 192.168.1.12:8080 down; server 192.168.1.13:8080 backup;
– 结合部署流程,在发布前执行 down → reload → 发布 → 验证 → 恢复,实现零感知运维











