Nginx多域名独立访问需为每个域名配置独立server块,通过server_name匹配Host头区分请求;域名须解析至服务器IP,HTTPS需SAN证书并单独配置ssl证书路径,推荐按域名拆分conf.d配置文件并include管理。
在 Nginx 中实现多域名独立访问,本质就是为每个域名配置一个独立的 server 块,靠 server_name 匹配 Host 头来区分请求。关键不在“怎么写”,而在“怎么分”和“怎么配对”——域名要分开管,路径要分开指,证书要分开配(HTTPS 场景下)。
不要把多个不相关的域名塞进同一个 server 块里,比如:
server_name site-a.com site-b.com;(仅适用于 www 与非 www 跳转或同站多别名)site-a.com 单独建一个 server 块,再为 site-b.com 建另一个这样每个站点才能拥有自己独立的 root、access_log、SSL 配置、重写规则等。混写会导致行为冲突,比如日志全记到一个文件、证书错配、跳转逻辑互相干扰。
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 下,server_name site-a.com www.site-a.com; 完全可行,Nginx 会按 Host 头精准匹配;但 HTTPS 涉及 TLS 握手阶段的 SNI 协商,只认 server_name 列表里的第一个域名去加载证书。
certbot -d site-a.com -d www.site-a.com 这类命令中server 块应明确写 listen 443 ssl;,并指向自己的证书文件,避免复用同一份 PEM 导致证书不匹配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 生效这种结构清晰、易定位、方便备份和迁移,也避免单个错误拖垮全部站点。