Nginx智能代理核心是upstream定义服务池,配合负载均衡策略(轮询、加权轮询、ip_hash、least_conn)、健康检查(max_fails/fail_timeout、proxy_next_upstream)及请求头透传(Host、X-Real-IP等)实现高效分发。

核心思路是:用 upstream 定义后端服务池,配合合适的负载均衡策略 + 健康检查 + 请求头透传,让 Nginx 不只是“转发”,而是智能分担任务。
选对负载均衡策略,匹配业务特征
策略不是越多越好,关键看请求模式和后端能力:
- 轮询(默认):适合无状态、硬件配置一致的 API 或静态服务。每台服务器轮流接一个请求,简单公平。
- 加权轮询(weight):当后端服务器 CPU/内存差异明显时使用。比如一台 16C32G,另一台 8C16G,可设 weight=2 和 weight=1,让强机多扛活。
- ip_hash:需保持会话(如登录态、购物车)且后端未做共享 Session 时启用。同一 IP 始终打到同一台机器,避免重复登录或数据错乱。
- least_conn:适用于长连接场景(如 WebSocket、HTTP/2 流式接口)。Nginx 会把新请求优先交给当前活跃连接最少的服务器,防止单台堆积大量慢连接。
配置健康检查,自动剔除故障节点
不健康的服务继续转发只会拖垮整体响应。Nginx 自带被动健康检查,建议显式配置:
- 在
server行中加上max_fails=3 fail_timeout=30s:连续 3 次超时或 5xx 就标记为不可用,30 秒内不再转发。 - 搭配
proxy_next_upstream error timeout http_500 http_502 http_503 http_504:当后端返回这些错误时,Nginx 主动尝试下一台,提升容错率。
优化代理行为,减少额外开销
默认转发可能丢关键信息或引发缓存问题,需手动加固:
- 务必设置
proxy_set_header Host $host和proxy_set_header X-Real-IP $remote_addr,确保后端能正确识别原始域名和用户真实 IP。 - 添加
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for,兼容多层代理链路。 - 对静态资源或可缓存接口,可加
proxy_buffering on和合理proxy_buffer_size,降低后端压力;对实时性要求高的流式响应,建议关掉缓冲(proxy_buffering off)。
结合变量与条件转发,实现动态分流
不止于“平均分”,还能按需调度:
- 用
$request_uri或$args做 location 匹配,把 /api/v1/admin/* 转给高权限集群,普通 /api/* 走常规集群。 - 根据
$http_user_agent区分移动端和 PC 端,转发到不同后端组做差异化处理。 - 用
map指令预定义规则,比如把特定地区 IP 段映射到就近机房的 upstream,降低延迟。


















