Nginx实现多域名集群解析的核心是通过upstream定义后端服务组、server块按server_name匹配域名并proxy_pass转发至对应upstream,配合proxy_set_header透传关键请求头,经nginx -t验证后reload生效。

用 Nginx 实现多域名的集群解析,核心是把不同域名的请求,按规则分发到后端多个服务器组成的集群中。这不是简单地“一个域名对应一台机器”,而是让 Nginx 充当智能调度员:收到来自 www.a.com、api.b.net、admin.c.org 的请求,自动转发到各自所属的服务集群,彼此隔离、互不干扰。
明确 upstream 集群定义
集群不是靠猜,得先在 Nginx 配置里明确定义。每个集群代表一组功能相同、可互相替代的后端服务节点:
- 用 upstream 块起个名字,比如
upstream cluster_api { ... } - 里面列出真实后端地址,支持 IP+端口(如
192.168.1.10:3000)或域名(需确保 DNS 可解析) - 可选负载策略:默认轮询;加
weight=2提升某节点权重;加backup标记备用机;加max_fails=3 fail_timeout=30s实现故障自动剔除
server 块按域名精准分流
每个 server 块绑定一个或多个域名,决定“谁进来、往哪送”:
-
listen 80;或listen 443 ssl;定义监听端口 -
server_name www.example.com example.com;支持空格分隔多个域名,也支持通配符如*.example.com(需配合 DNS 泛解析) -
location /内使用proxy_pass http://cluster_api;转发到前面定义的 upstream 名称,不是 URL 地址 - 若需区分路径,比如
/v1/和/v2/走不同集群,可在同一 server 块内写多个 location,各自 proxy_pass 到不同 upstream
转发头信息不能少
后端服务常依赖原始请求头判断来源或做鉴权,Nginx 默认不透传,必须显式配置:
-
proxy_set_header Host $host;—— 把用户访问的域名传下去,避免后端看到的是内部 IP 或 upstream 名 -
proxy_set_header X-Real-IP $remote_addr;—— 传递真实客户端 IP -
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;—— 补全完整 IP 链路(尤其经多层代理时) - 若后端是 HTTPS 服务,还需加
proxy_set_header X-Forwarded-Proto $scheme;
验证与热更新要闭环
改完配置别直接 reload,容易因语法错误导致 Nginx 退出:
- 运行
sudo nginx -t检查语法和配置加载是否成功 - 确认输出含
test is successful才执行sudo nginx -s reload - reload 后建议用
curl -I http://www.example.com和curl -I https://api.example.com分别测试各域名响应头与状态码 - 查看
/var/log/nginx/error.log,有连接拒绝、上游不可达等报错,说明 upstream 地址不通或端口未开放


















