nginx中多个域名共用同一网站目录只需一个server块,用server_name指定主域名、server_name后空格分隔多个域名或配合通配符即可实现,无需重复配置;https需为所有域名统一配置ssl证书并强制跳转。
多个域名指向同一个网站目录,不需要为每个域名单独写一个 <virtualhost></virtualhost> 块,更不需要重复配置相同路径。核心做法是:在一个虚拟主机配置中,用 servername 指定主域名,再用 serveralias 列出其他所有要共用该站点的域名(支持通配符和空格分隔)。
直接在单个 VirtualHost 中声明多个域名
只需一个 <virtualhost></virtualhost> 配置即可,关键在于正确使用 ServerAlias:
-
ServerName是主域名,必须唯一、规范(如www.example.com) -
ServerAlias后可跟多个域名,用空格分隔;支持*通配(如*.example.com) - 所有匹配
ServerName或任一ServerAlias的请求,都会由这个虚拟主机响应,共用同一DocumentRoot
示例配置(保存为 /etc/apache2/sites-available/example.conf):
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com test.com www.test.com demo-site.net
DocumentRoot /var/www/shared-site
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/shared-error.log
CustomLog ${APACHE_LOG_DIR}/shared-access.log combined
确保 DNS 和本地测试都指向正确 IP
多个域名生效的前提是它们都解析到这台服务器的 IP 地址:
- 线上环境:在域名服务商后台,为
example.com、test.com、demo-site.net分别添加 A 记录,指向服务器公网 IP - 本地开发:编辑
/etc/hosts(Linux/macOS)或C:\Windows\System32\drivers\etc\hosts(Windows),追加:
127.0.0.1 example.com www.example.com test.com www.test.com demo-site.net
启用配置并验证
完成配置后需启用并检查语法:
- Debian/Ubuntu 系统:
sudo a2ensite example.conf && sudo systemctl reload apache2 - CentOS/RHEL 系统:将配置文件放入
/etc/httpd/conf.d/,然后执行sudo httpd -t && sudo systemctl reload httpd - 务必运行
sudo apache2ctl -t或sudo httpd -t验证配置无语法错误 - 访问任意一个绑定的域名(如
http://test.com),应看到与example.com完全一致的内容
进阶:HTTPS 下同样适用
若需 HTTPS 支持,只需复制一份 <virtualhost></virtualhost> 配置,保留相同的 ServerName 和 ServerAlias,并补充 SSL 相关指令(如 SSLEngine on、证书路径等)。多个域名共用同一站点时,Let’s Encrypt 的 certbot 也支持用 -d 参数一次性为所有域名签发证书,例如:
certbot --apache -d example.com -d www.example.com -d test.com -d demo-site.net











