一聚教程网:一个值得你收藏的教程网站

热门教程

Apache 虚拟主机如何通过 ServerAlias 匹配多个子域名

时间:2026-08-17 20:04:49 编辑:袖梨 来源:一聚教程网

Apache通过ServerAlias实现子域名泛解析,核心是用ServerAlias *.example.com声明通配规则,配合DNS泛解析A记录;ServerName仅设一个主域名,HTTP与HTTPS需分别配置且各自重复声明ServerAlias。

Apache 通过 ServerAlias 匹配多个子域名,核心是用通配符 *.example.com 声明泛解析规则,并配合 DNS A 记录指向服务器 IP。它不靠写死每个子域,而是让一个 <VirtualHost> 块统一响应所有匹配的子域名请求。

ServerAlias 写法必须规范

在虚拟主机配置中,ServerName 只能设一个主域名(如 example.com),而子域名泛匹配全靠 ServerAlias

  1. 正确写法:ServerAlias *.example.com —— 星号前必须带英文点,表示“任意一级子域名”
  2. 支持多级泛配:ServerAlias *.staging.example.comServerAlias *.dev.example.com
  3. 禁止写法:ServerAlias *example.comServerAlias example.*ServerAlias www.*.example.com —— Apache 不识别这些格式
  4. 可混用具体子域和泛域:ServerAlias www.example.com blog.example.com *.example.com

DNS 必须同步配置泛解析

ServerAlias *.example.com 生效的前提,是 DNS 层面已为该泛域添加 A 记录:

  1. 登录域名管理后台(如阿里云、DNSPod),添加一条主机名为 *、记录值为服务器公网 IP 的 A 记录
  2. 本地测试不能靠 hosts 文件模拟泛解析(127.0.0.1 *.example.com 无效),只能逐条加,比如:

    127.0.0.1 a.example.com

    127.0.0.1 b.example.com

  3. TTL 建议设低(如 300 秒),方便调试后快速生效

配置文件要完整且模块就位

只写 ServerAlias 不起作用,整个虚拟主机块必须完整,且依赖模块已启用:

  1. Ubuntu/Debian:运行 a2enmod rewrite(必要);若要用动态子目录(如 a.example.com → /var/www/a),还需 a2enmod vhost_alias
  2. CentOS/RHEL:确认 /etc/httpd/conf/httpd.conf 中有未注释的:

    LoadModule rewrite_module modules/mod_rewrite.so

    如需泛目录映射,再加:

    LoadModule vhost_alias_module modules/mod_vhost_alias.so

  3. Windows phpEnv:打开 Apacheconfhttpd.conf,取消以下两行注释:

    LoadModule vhost_alias_module modules/mod_vhost_alias.so

    Include conf/extra/httpd-vhosts.conf

HTTP 和 HTTPS 要分开配,别名各自声明

80 端口和 443 端口是两个独立的虚拟主机上下文,ServerAlias 不能复用:

  1. HTTP 块里写了 ServerAlias *.example.com,HTTPS 块里也必须再写一遍
  2. 漏配 HTTPS 的泛域名,会导致访问 https://test.example.com 时匹配失败,可能跳转到默认站点或返回 404
  3. HTTPS 块中还需启用 SSL 引擎并指定证书路径,例如:

    SSLEngine on

    SSLCertificateFile /path/to/cert.pem

    SSLCertificateKeyFile /path/to/key.pem

热门栏目