Nginx本身不支持全局负载均衡(GSLB),仅能实现单区域内的本地负载均衡;需与智能DNS或Anycast协同,由GSLB层负责跨地域调度,Nginx专注本区反向代理、健康检查与边缘处理。

upstream 是负载均衡的调度核心
所有后端节点必须定义在 http 块中,不能嵌套在 server 或 location 内:
- 每个 upstream 块起一个唯一名称(如
web_cluster),供 proxy_pass 引用 - 支持多种调度策略:
round_robin(默认)、least_conn(适合长连接)、ip_hash(会话保持)、hash $request_uri(URL 一致性哈希) - 可为每个 server 设置:
weight(权重)、max_fails(连续失败阈值)、fail_timeout(标记不可用时长)、backup(仅故障时启用)
proxy_pass 实现请求转发与协议适配
proxy_pass 不是独立负载模块,而是把请求按 upstream 规则投递给后端的关键指令:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 写法必须是
proxy_pass http://web_cluster;(末尾带分号,且不能加路径,否则会截断原始 URI) - 若 location 使用正则匹配(如
location ~ ^/api/),proxy_pass 后不能带 URI 路径,否则报错 - 常用配套头设置:
proxy_set_header Host $host;、proxy_set_header X-Real-IP $remote_addr;、proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
健康检查靠被动探测,需合理配置超时参数
Nginx 原生不提供主动心跳检测(如定期 GET /health),只依赖请求失败后的被动标记:
- 当某 backend 返回 500/502/503/504 或连接/读写超时时,自动剔除该节点
- 需配合
max_fails=2 fail_timeout=30s控制故障判定节奏,避免抖动误判 - 建议设置合理超时:
proxy_connect_timeout 10s;、proxy_read_timeout 60s;、proxy_send_timeout 60s;
想接近“全局”效果?得靠架构组合
若业务需要跨机房容灾或就近接入,Nginx 需配合其他组件协同工作:
- 前端用 DNS 轮询或智能 DNS(如阿里云云解析、NS1)做第一层地域分流
- 各区域部署独立 Nginx 集群,内部用 upstream 做精细负载 + 会话保持
- 关键服务增加 Consul + nginx-upstream-check-module(第三方)补主动健康检查
- 高可用场景下,Nginx 自身也应集群部署,前端再加 LVS/Keepalived 或云厂商 SLB

















