Nginx中一个server块可通过空格分隔的server_name绑定多个域名,统一指向同一root目录;但需注意共用内容、HTTPS需SAN证书覆盖全部域名,且缺乏站点隔离性。

可以,但不推荐直接让多个独立域名共用同一个 root 目录——因为这本质上不是“多站点”,而是多个域名指向同一套内容。如果你确实需要这种行为(比如品牌镜像、SEO 重定向、测试别名等),Nginx 支持通过 server_name 列表实现,无需重复写多个 server 块。
一个 server 块绑定多个域名
在单个 server 配置中,server_name 指令支持空格分隔的多个域名,Nginx 会将所有匹配的请求都路由到该块处理:
- 编辑配置文件(如
/etc/nginx/conf.d/example.conf或主配置中的http块内) - 写入如下结构:
server {
listen 80;
server_name example.com www.example.com demo.example.net test-site.org;
root /var/www/shared-site;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
注意:server_name 后面可跟任意数量的域名(含通配符如 *.example.com),只要它们解析到本机 IP,且 DNS 已生效,Nginx 就能识别并统一服务。
区分不同域名的响应行为(可选)
虽然共用 root,你仍可通过变量对不同域名做差异化处理,例如记录来源、返回不同 Header 或跳转:
- 用
$host或$server_name判断当前访问域名 - 在
location或if块中做条件判断(慎用if,仅限简单逻辑) - 示例:为特定域名添加自定义响应头
if ($host = "demo.example.net") {
add_header X-Site "Demo Mirror";
}
与多站点配置的本质区别
这种方式和真正“多站点”不同:
- 没有隔离性:所有域名共享静态文件、PHP 脚本、日志路径(除非手动拆分
access_log) - 无法为各域名单独设置 SSL 证书(若启用 HTTPS,需用 SNI,但证书仍需覆盖全部域名)
- 不适用于需要独立 CMS、数据库或用户体系的场景
如果目标是“看起来像不同网站”,建议用反向代理 + 子路径,或直接配置多个 server 块并分别指定 root ——这才是 Nginx 多域名的标准实践。


















