切换数据中心时DNS传播阶段的Nginx子域名路由问题
基于Nginx反向代理的多服务路由架构实现
我目前部署了三台服务器来支撑业务服务,具体分工和配置如下:
服务器架构明细
- API数据服务服务器:IP为
11.111.11.11,专门负责处理所有业务数据接口请求,提供数据查询、提交等核心服务 - 静态资源服务服务器:IP为
22.222.22.22,主要托管前端静态资源,包括HTML页面、CSS样式、JavaScript脚本以及图片、字体等文件 - Nginx反向代理服务器:IP为
33.333.33.33,作为整个服务集群的流量入口,核心作用是根据请求的子域名和协议,将请求精准路由到对应的后端服务(甚至是自身的特定服务)
DNS配置说明
我为三个域名/子域名配置了A类型DNS记录,全部指向Nginx反向代理服务器的IP 33.333.33.33:
example.comwww.example.comapi.example.com
这样用户无论访问哪个域名,请求都会先到达Nginx服务器,再由它进行转发处理。
Nginx核心路由配置示例
下面是我实际使用的Nginx配置片段,完美实现了上述路由逻辑:
# 处理api.example.com的请求,转发至API数据服务服务器 server { listen 80; listen 443 ssl; server_name api.example.com; # HTTPS证书配置(如果启用了SSL) ssl_certificate /etc/nginx/ssl/example.com.pem; ssl_certificate_key /etc/nginx/ssl/example.com.key; location / { proxy_pass http://11.111.11.11; # 传递必要的请求头给后端服务 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } # 处理example.com和www.example.com的请求,转发至静态资源服务服务器 server { listen 80; listen 443 ssl; server_name example.com www.example.com; ssl_certificate /etc/nginx/ssl/example.com.pem; ssl_certificate_key /etc/nginx/ssl/example.com.key; location / { proxy_pass http://22.222.22.22; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 静态资源优化配置(可选) expires 7d; add_header Cache-Control "public, max-age=604800"; } } # 可选:配置Nginx自身的监控或管理服务 server { listen 80; server_name localhost; location /nginx-status { stub_status on; # 仅允许本地访问监控页面 allow 127.0.0.1; deny all; } }
一些实用的注意事项
- 确保Nginx服务器能正常连通两台后端服务器的对应端口(默认HTTP是80,如果后端用了自定义端口,记得在
proxy_pass里加上端口号,比如http://11.111.11.11:8080) - 建议使用通配符SSL证书(
*.example.com),这样所有子域名都能共用一套证书,减少维护工作量 - 如果后续需要扩容后端服务,可以直接在Nginx配置中添加负载均衡规则,比如使用
upstream模块实现多服务器的流量分发
内容的提问来源于stack exchange,提问作者darksmurf
相关产品推荐
相关产品推荐

