Nginx负载均衡本质是通过反向代理与upstream集群定义、proxy_pass转发指令及关键头部透传实现请求智能分流,支持轮询、加权轮询、ip_hash、least_conn等算法,并依赖被动/主动健康检查保障高可用。

Nginx 在集群架构中实现后端业务负载均衡,本质是通过反向代理 + 多节点调度完成请求分流。它不直接参与业务逻辑,而是作为统一入口,把流量智能分发到多个后端服务实例,从而提升整体吞吐、容错性和可扩展性。
核心配置三要素
要让 Nginx 真正承担起集群负载均衡职责,必须明确三个基础组件:
-
upstream 块:定义后端服务集群,例如
upstream app_cluster { server 10.0.1.10:8080; server 10.0.1.11:8080; } -
proxy_pass 指令:在 location 中指向 upstream 名称,如
proxy_pass http://app_cluster; -
关键头部透传:至少设置
proxy_set_header X-Real-IP $remote_addr;和proxy_set_header Host $host;,确保后端能获取真实客户端信息
按场景选对负载策略
不同业务特性决定算法选择,不是越复杂越好:
- 轮询(默认):适合无状态、性能相近的服务,如 REST API 或静态资源接口
-
weight 加权轮询:当服务器硬件差异明显时使用,例如一台 16C32G、一台 8C16G,可分别设
weight=2和weight=1 - ip_hash:解决无共享 Session 的会话保持问题,但注意 NAT 环境下可能集中到少数 IP 段
- least_conn:适用于长连接或耗时操作多的场景,比如文件上传、实时消息推送
健康检查与故障转移机制
Nginx 自带被动健康检查,但需合理配置才能及时响应异常:
- 每台 server 可加
max_fails=3 fail_timeout=30s,表示 30 秒内失败 3 次即标记为不可用 - 用
backup标记备用节点,仅在所有主节点失效时启用,避免日常过载 - 配合
down手动下线维护中的节点,无需重启 Nginx 即可生效 - 若需主动探测(如 HTTP HEAD 请求),需启用
ngx_http_upstream_check_module第三方模块
生产环境关键加固点
上线前建议检查这几项,避免常见隐患:
- 确保所有后端服务监听地址可被 Nginx 访问(防火墙、网络策略、SELinux)
- proxy_pass 后不要漏掉斜杠,
http://app_cluster/和http://app_cluster路径拼接行为不同 - 启用
proxy_next_upstream error timeout http_500 http_502 http_503实现自动重试 - 日志中加入
$upstream_addr和$upstream_response_time,便于定位慢节点


















