Apache实现泛域名解析需DNS配置*记录指向服务器IP,并在Apache中启用mod_vhost_alias模块,通过VirtualDocumentRoot指令按子域名动态映射目录,如%-2+将blog.example.com映射到/var/www/blog/htdocs。
linux 下 apache 实现泛域名解析 + 动态虚拟主机,核心是两步配合:dns 层面支持 *.example.com 解析到服务器 ip,apache 层面用 virtualdocumentroot 或 serveralias *.example.com 动态匹配并分发请求。关键不在“多个固定配置”,而在“按域名自动映射目录”。
DNS 必须先配通泛解析
在你的 DNS 服务器(如 BIND)或域名服务商后台,为域名添加一条 A 记录:
-
主机名 填
*(不是 www 或其他前缀) -
记录值 / 指向 填 Apache 服务器的公网 IP(如
192.168.1.100或真实公网地址) - 保存后等待 TTL 生效,可用
dig test1.example.com A +short验证是否返回正确 IP
Apache 启用 name-based 虚拟主机并加载 mod_vhost_alias
确保 Apache 已启用 mod_vhost_alias 模块(动态路径映射必需):
- Debian/Ubuntu:
a2enmod vhost_alias && systemctl restart apache2 - CentOS/RHEL:
echo "LoadModule vhost_alias_module modules/mod_vhost_alias.so" >> /etc/httpd/conf/httpd.conf,然后重启httpd - 检查是否加载成功:
apache2ctl -M | grep vhost或httpd -M | grep vhost
配置泛域名动态虚拟主机(推荐 VirtualDocumentRoot)
在 /etc/apache2/sites-available/(Debian)或 /etc/httpd/conf.d/(RHEL)中新建配置文件,例如 wildcard.conf:
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
UseCanonicalName Off
VirtualDocumentRoot /var/www/%-2+/htdocs
<Directory "/var/www/*/htdocs">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
说明:
-
%-2+表示取倒数第二个点之后的部分 ——blog.example.com→blog,api.v2.example.com→v2 - 目录结构示例:
/var/www/blog/htdocs/index.html对应访问blog.example.com - 若想按完整子域(如
user1.example.com→/var/www/user1),改用%1(第一个域段)或%-3+(三级子域起始)
补充:纯 ServerAlias 泛匹配(静态共用目录)
如果所有子域名都指向同一套代码(如 SaaS 多租户前端),无需动态路径,只需:
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
DocumentRoot /var/www/shared-site
<Directory "/var/www/shared-site">
Require all granted
</Directory>
</VirtualHost>
此时需在应用层(如 PHP/Node.js)读取 HTTP_HOST 请求头来区分租户,Apache 不做路径切换。


















