多机房就近接入的核心是全局调度(GTM/Anycast)实现流量分发,各机房Nginx仅负责本机房内域名路由;server块配置统一、无需地理判断;DNS或BGP决定“就近”,Nginx专注本机房反向代理与业务逻辑。

多机房环境下实现基于域名的就近接入,核心不是靠单台 Nginx 的 server 块直接完成“就近”,而是通过上层全局调度(如 Anycast EIP 或 GTM)把用户流量先分发到离他最近的机房入口 LB,再由该机房内网的 Nginx(或 Gateway)做最终的域名路由。单个 server 块只负责本机房内的域名识别与转发,不参与跨地域决策。
1. 各机房 Nginx 的 server 块只需按标准域名配置
每个机房部署的 Nginx(或 Gateway 集群)都配置相同的域名规则,例如:
server_name game.example.com;root /var/www/game/;- 搭配
location /api { proxy_pass http://backend_cluster; }转发到本机房后端
注意:所有机房的 server 块内容一致,无需写 IP 判断或地理标签;“就近”由前置调度系统保证,Nginx 只做本机房内务。
2. 真正实现“就近”的关键在 DNS 或 Anycast 层
用户访问 game.example.com 时,解析过程决定流量走向:
- 用 GTM(全局流量管理):按用户来源地(如“中国内地”“中国香港”“海外”)返回对应机房的 VIP(如北京 LB 的 IP、香港 LB 的 IP)
- 用 Anycast EIP:将同一 IP 广播到多个机房,BGP 自动选最短路径,用户请求天然落到最近机房的 LB
- 两者都需配置健康检查,故障时自动剔除异常机房的 IP
3. 机房内 LB + Nginx 协同分工要清晰
以某机房为例,典型链路是:
用户 → GTM/CNAME → 本机房公网 LB(如阿里云 SLB)→ 内网 Nginx(server 块生效)→ 本地业务集群
- LB 层只做基础负载均衡和健康检查,不处理域名逻辑
- Nginx 的
server块专注域名识别、静态资源服务、反向代理、限流鉴权等,不暴露公网 - 各机房 Nginx 后端只连本机房 ECS,不跨机房直连(避免延迟和专线瓶颈)
4. 配置验证与容灾要点
上线前需确认:
- 用
dig game.example.com +short检查不同地区 DNS 解析结果是否指向预期机房 IP - 在各机房内部 curl -H "Host: game.example.com" http://127.0.0.1 确认
server块匹配正常 - 模拟某个机房 LB 故障,观察 GTM 是否在 1 分钟 TTL 内切走流量
- 所有机房的
server块配置建议统一托管于 Git,配合 CI 自动同步,避免手工不一致

















