Nginx反向代理实现负载均衡的核心是upstream定义后端集群并配合proxy_pass转发,支持轮询、加权、least_conn、ip_hash等策略,需配置健康检查、超时参数、真实IP透传及keepalive连接复用。

通过 Nginx 反向代理实现后端集群的统一负载,核心是将 Nginx 作为入口网关,把客户端请求按策略分发到多个后端服务实例,同时保障高可用与可扩展性。
配置 upstream 定义后端服务集群
在 http 块中定义 upstream,列出所有后端节点地址,这是负载均衡的基础:
- 支持 IP + 端口或域名(需确保 DNS 可解析)
- 可为每个节点设置权重(
weight=2)、最大失败次数(max_fails=3)和超时恢复时间(fail_timeout=30s) - 建议启用健康检查(Nginx Plus 支持主动探测;开源版可通过
proxy_next_upstream实现被动检测)
选择合适的负载均衡算法
Nginx 内置多种调度策略,根据业务场景选用:
- round_robin(默认):轮询,适合各节点性能相近、无状态服务
- least_conn:优先转发给当前连接数最少的节点,适合长连接或响应时间差异大的场景
- ip_hash:基于客户端 IP 哈希,保证同一 IP 始终落到同一后端(注意 IPv6 和代理环境下的 IP 获取问题)
- hash $request_uri consistent:一致性哈希,适用于缓存命中率敏感的服务(如静态资源分发)
在 server 块中启用反向代理转发
在 server 配置中使用 proxy_pass 指向 upstream 名称,并补全关键代理头:
- 必须设置
proxy_set_header Host $host和proxy_set_header X-Real-IP $remote_addr,确保后端能获取真实请求信息 - 建议开启
proxy_next_upstream error timeout http_500 http_502 http_503 http_504,自动重试失败请求 - 合理设置超时参数:
proxy_connect_timeout、proxy_send_timeout、proxy_read_timeout,避免阻塞和级联超时
增强可用性与可观测性
生产环境还需补充以下配置提升稳定性:
- 启用
keepalive连接池(proxy_http_version 1.1; proxy_set_header Connection "";),减少后端建连开销 - 添加
proxy_cache缓存静态响应(需配合proxy_cache_valid和缓存键规则),降低后端压力 - 通过
log_format记录 upstream_addr 和 upstream_response_time,便于定位慢节点或故障转移行为 - 配合 Prometheus + nginx-vts-exporter 或 OpenResty 的 lua-resty-prometheus,暴露实时负载指标


















