服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-11-09 简米科技 4,108 字 10 分钟阅读

nginx配置子域名怎么绑定多个二级域名?如何绑定多个二级域名

导读通过配置Nginx的server_name指令,配合泛解析或分别指定二级域名,即可让一台服务器同时响应多个子域名,无论是想绑定blog.example.com、api.example.com还是任意子域名,核心逻辑都围绕server块(虚拟主机)展开,如何用nginx配置子域名绑定多个二级域名在动手配置前,先理……

通过配置Nginx的server_name指令,配合泛解析或分别指定二级域名,即可让一台服务器同时响应多个子域名。无论是想绑定blog.example.com、api.example.com还是任意子域名,核心逻辑都围绕server块(虚拟主机)展开。


如何用nginx配置子域名绑定多个二级域名

在动手配置前,先理解Nginx处理流量的基本模型:每个server块定义一组监听规则,当请求到达时,Nginx会根据请求头中的Host字段,匹配对应的server_name,匹配顺序是:精确匹配 > 通配符前缀匹配 > 通配符后缀匹配 > 正则匹配 > 默认server块,这个优先级直接决定了多域名配置的成败。

准备工作:域名解析与服务器环境

  1. 在域名服务商控制台(如简米云、酷番云、Cloudflare),添加A记录指向服务器公网IP,若想让所有子域名都生效,可以使用泛解析(),记录值为服务器IP。
  2. 确保服务器上Nginx已安装并运行,检查命令:nginx -v。
  3. 确认防火墙已放行80(HTTP)和443(HTTPS)端口,否则外部请求无法到达Nginx。

逐个声明二级域名

适合子域名数量有限、且每个站点内容独立的场景,在Nginx配置目录(通常为/etc/nginx/conf.d/)下,为每个子域名新建一个配置文件,或在一个文件中写多个server块。

创建/etc/nginx/conf.d/blog.conf:

server {
    listen 80;
    server_name blog.example.com;
    root /var/www/blog;
    index index.html;
}

创建/etc/nginx/conf.d/api.conf:

server {
    listen 80;
    server_name api.example.com;
    root /var/www/api;
    index index.php;
    # 此处可配置PHP或Node.js代理等后续逻辑
}

检查配置并重载:nginx -t && nginx -s reload,这种方式直观易懂,每个站点独立管理,互不影响。

泛解析绑定任意二级域名

当业务希望任意子域名都能访问,且由同一套程序处理时(比如SaaS平台、多租户系统),可用通配符,行业共识认为,泛解析搭配Nginx的正则捕获,是将动态子域名映射到目录或参数的最佳路径。

server {
    listen 80;
    server_name .example.com;
    # 提取子域名部分,传给后端程序处理
    set $subdomain "";
    if ($host ~ ^(.)\.example\.com$) {
        set $subdomain $1;
    }
    root /var/www/$subdomain;
    index index.html;
}

配置完成后,无需再为每个新用户添加server块,新建目录即可上线新站点,需知,若同时存在精确与泛解析,精确匹配的server块永远优先生效,这是解决各方案冲突的关键。

nginx二级域名配置后无法访问?运维排错实战

很多人配置完nginx二级域名解析后,发现访问报错或跳到了主站,多数情况下并非Nginx配置有误,而是域名解析或缓存问题,按以下顺序排查,能快速定位故障点。

  1. 检查本机解析:在服务器上执行dig blog.example.com,确认返回的IP与服务器IP一致,若解析地址不对,去域名服务商处修改TTL并等待生效。
  2. 测试Nginx响应:在服务器本地执行curl -H "Host: blog.example.com" http://127.0.0.1,看返回的HTML文件是否正确,若错误,则问题在Nginx配置;若正确,问题出在网络或防火墙。
  3. 确认默认server块:访问IP时,Nginx会落到default_server,若此server块配置了主站目录,未匹配域名的请求就会显示主站内容,容易让人误以为配置失效。
server {
    listen 80 default_server;
    server_name _;
    return 444;  # 关闭未认领域名的连接
}

这段配置会让未绑定的域名直接断开,避免错误内容的暴露,也是多数生产环境的推荐做法。

多站点场景下,nginx配置二级域名的安全与性能考量

多个二级域名共享同一IP时,安全隔离与资源分配就不能马虎了,常见做法是统一使用SSL证书管理工具(如acme.sh)为每个域申请证书,但要注意Let's Encrypt的速率限制,更高效的方式是使用泛域名证书(.example.com),一张证书覆盖所有子域,配置时指定同一证书路径即可。

listen 443 ssl;
server_name blog.example.com api.example.com;
ssl_certificate /etc/nginx/ssl/example_com_fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/example_com_key.pem;

对于PHP站点,建议为每个server块配置独立的open_basedir限制;对于Java或Node应用,则将不同子域的反向代理指向不同的本地端口,充分利用Nginx的upstream模块做负载均衡。

配置维度 传统方式 更优实践
目录部署 各站点文件放在同一根目录 按域名分目录、分用户,权限独立
证书管理 每个域名单独申请 泛域名证书统一管理,减少过期风险
日志处理 所有站点写入同一日志文件 access_log按server块拆分,便于分析
资源配置 默认共享worker进程 使用limit_req模块限制单个子域流量

如何处理不同端口与协议的子域名需求

部分场景下,子域名需要开放非常规端口(比如doc.example.com:8080),Nginx本身并不推荐在server_name中指定端口,正确的做法是监听对应端口,再绑定域名,比如一个内部工具站点,只想让公司网段访问:

server {
    listen 8080;
    server_name admin.example.com;
    allow 192.168.1.0/24;
    deny all;
    proxy_pass http://127.0.0.1:3000;
}

更常见的需求是HTTP自动跳转HTTPS,通过一个复用server块,将所有HTTP流量统一转向443端口,既简化配置又避免重复代码:

server {
    listen 80;
    server_name .example.com;
    return 301 https://$host$request_uri;
}

nginx配置多个二级域名常见误区与规避

在root路径中写死域名。 正确做法是使用变量($host或提取的子域)拼接路径,否则换域名就得改配置。忽略配置文件加载顺序。 Nginx按文件名ASCII顺序读取conf.d下的文件,若两个文件里有相同监听端口和server_name,先加载的生效,后加载的报错。只重载不测试。 每次修改后务必执行nginx -t,错误配置会让服务直接崩溃,而不是自动跳过。

用Nginx泛解析配置多级域名(如二级、三级共存)

泛解析配置确实支持.example.com,但若要同时支持blog.example.com和user.blog.example.com,需要两个server块或一个更高级的正则,在此场景下,推荐在nginx配置中同时保留两种解析方式:

server {
    listen 80;
    server_name .example.com;  # 匹配任意单级子域
    root /var/www/$host;
}
server {
    listen 80;
    server_name ~^(?<sub>[^.]+)\.(?<parent>.+)$;
    root /var/www/$parent/$sub;
}

第一个块处理标准二级域名,第二个块通过正则捕获多级子域名的层级关系,将不同层级的子域指向不同的文件位置,适合文档站、社区站等有明显树状结构的业务。

qa:nginx配置子域名绑定多个二级域名实操疑问

问题:服务器上已有主站,绑定二级域名后访问主站域名会冲突吗?

不会,只要主站的server_name写的是example.com和www.example.com,二级域名的server_name是blog.example.com,两者井水不犯河水,Nginx根据Host自动路由,即使共用同一个IP和80端口也互不干扰,注意不要用default_server同时指向两个站点,否则IP直连时会随机落到其中一个。

问题:泛解析后,未备案的域名访问时会不会被拦截?

国内服务器要求所有指向该IP的域名都必须备案,泛解析会把任意域名(包括未备案的)都接入服务器,一旦被扫描到,机房会先行封禁80端口,稳妥做法是关闭default_server或只匹配信任的后缀,将泛解析改为逐一添加,并在Nginx上层设置访问白名单。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱