最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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:
- 正确写法:
ServerAlias *.example.com—— 星号前必须带英文点,表示“任意一级子域名” - 支持多级泛配:
ServerAlias *.staging.example.com或ServerAlias *.dev.example.com - 禁止写法:
ServerAlias *example.com、ServerAlias example.*、ServerAlias www.*.example.com—— Apache 不识别这些格式 - 可混用具体子域和泛域:
ServerAlias www.example.com blog.example.com *.example.com
DNS 必须同步配置泛解析
ServerAlias *.example.com 生效的前提,是 DNS 层面已为该泛域添加 A 记录:
- 登录域名管理后台(如阿里云、DNSPod),添加一条主机名为
*、记录值为服务器公网 IP 的 A 记录 - 本地测试不能靠
hosts文件模拟泛解析(127.0.0.1 *.example.com无效),只能逐条加,比如:127.0.0.1 a.example.com127.0.0.1 b.example.com - TTL 建议设低(如 300 秒),方便调试后快速生效
配置文件要完整且模块就位
只写 ServerAlias 不起作用,整个虚拟主机块必须完整,且依赖模块已启用:
- Ubuntu/Debian:运行
a2enmod rewrite(必要);若要用动态子目录(如a.example.com → /var/www/a),还需a2enmod vhost_alias - CentOS/RHEL:确认
/etc/httpd/conf/httpd.conf中有未注释的:LoadModule rewrite_module modules/mod_rewrite.so如需泛目录映射,再加:
LoadModule vhost_alias_module modules/mod_vhost_alias.so - Windows phpEnv:打开
Apacheconfhttpd.conf,取消以下两行注释:LoadModule vhost_alias_module modules/mod_vhost_alias.soInclude conf/extra/httpd-vhosts.conf
HTTP 和 HTTPS 要分开配,别名各自声明
80 端口和 443 端口是两个独立的虚拟主机上下文,ServerAlias 不能复用:
- HTTP 块里写了
ServerAlias *.example.com,HTTPS 块里也必须再写一遍 - 漏配 HTTPS 的泛域名,会导致访问
https://test.example.com时匹配失败,可能跳转到默认站点或返回 404 - HTTPS 块中还需启用 SSL 引擎并指定证书路径,例如:
SSLEngine onSSLCertificateFile /path/to/cert.pemSSLCertificateKeyFile /path/to/key.pem