最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 Virtual Host 虚拟主机如何配置实现多域名独立访问
时间:2026-08-29 10:57:49 编辑:袖梨 来源:一聚教程网
Nginx多域名独立访问需为每个域名配置独立server块,通过server_name匹配Host头区分请求;域名须解析至服务器IP,HTTPS需SAN证书并单独配置ssl证书路径,推荐按域名拆分conf.d配置文件并include管理。
在 Nginx 中实现多域名独立访问,本质就是为每个域名配置一个独立的 server 块,靠 server_name 匹配 Host 头来区分请求。关键不在“怎么写”,而在“怎么分”和“怎么配对”——域名要分开管,路径要分开指,证书要分开配(HTTPS 场景下)。
每个域名一个 server 块,不混写
不要把多个不相关的域名塞进同一个 server 块里,比如:
- ❌ 错误做法:
server_name site-a.com site-b.com;(仅适用于 www 与非 www 跳转或同站多别名) - ✅ 正确做法:为
site-a.com单独建一个server块,再为site-b.com建另一个
这样每个站点才能拥有自己独立的 root、access_log、SSL 配置、重写规则等。混写会导致行为冲突,比如日志全记到一个文件、证书错配、跳转逻辑互相干扰。
域名必须能解析到服务器 IP
Nginx 只处理已送达的请求。如果 DNS 没生效,或者本地 /etc/hosts 没配,浏览器根本发不出带正确 Host 头的请求。
- 检查方式:用
curl -H "Host: site-a.com" http://your-server-ip测试 —— 若能返回预期页面,说明 Nginx 配置已就绪,问题出在 DNS 或客户端解析 - 泛域名
*.example.com不自动包含example.com,需额外加一行server_name example.com *.example.com;或单独配一个块
HTTP 和 HTTPS 的配置逻辑不同
HTTP 下,server_name site-a.com www.site-a.com; 完全可行,Nginx 会按 Host 头精准匹配;但 HTTPS 涉及 TLS 握手阶段的 SNI 协商,只认 server_name 列表里的第一个域名去加载证书。
- HTTPS 必须用 SAN 证书,且所有域名都得出现在
certbot -d site-a.com -d www.site-a.com这类命令中 - 每个 HTTPS
server块应明确写listen 443 ssl;,并指向自己的证书文件,避免复用同一份 PEM 导致证书不匹配 - 建议 HTTP 块统一做 301 跳转到 HTTPS,例如:
return 301 https://$host$request_uri;
配置组织推荐分离管理
避免直接修改 /etc/nginx/nginx.conf 主文件,而是按站点拆分:
- 新建配置文件如
/etc/nginx/conf.d/site-a.com.conf和/etc/nginx/conf.d/site-b.com.conf - 确保主配置中已启用
include /etc/nginx/conf.d/*.conf;(多数发行版默认开启) - 每次改完执行
sudo nginx -t验证语法,再sudo systemctl reload nginx生效
这种结构清晰、易定位、方便备份和迁移,也避免单个错误拖垮全部站点。