需先配置DNS泛解析再设Apache通配符虚拟主机:1. DNS添加 A记录指向服务器IP;2. Apache中用ServerAlias .example.com配合ServerName example.com;3. HTTPS需SAN含*.example.com的证书;4. 重载服务并验证。
要让 apache 接收所有子域名(比如 a.example.com、blog.example.com、anything.example.com),核心是两步:dns 泛解析 + apache 虚拟主机通配符配置。缺一不可,且顺序不能颠倒。
1. 先在 DNS 服务商处设置泛解析 A 记录
Apache 只能处理已抵达服务器的请求。如果子域名根本没解析到你的服务器 IP,后续配置全无效。登录你购买域名的平台(如阿里云、腾讯云、Cloudflare)→ 进入该域名的 DNS 解析管理 → 添加一条新记录:
- 主机名:填 *(英文星号,不能加引号)
- 记录类型:选 A
-
记录值 / 指向:填你服务器的公网 IPv4 地址(例如
203.208.39.123) - TTL:默认或 600 秒即可
保存后等待生效(通常 5–30 分钟)。可用命令验证:ping test123.example.com 应返回你的服务器 IP;dig test123.example.com +short 应输出相同 IP。
2. Apache 中启用泛域名虚拟主机
确保使用的是基于名称的虚拟主机(Name-based Virtual Host),这是现代部署的标准方式。编辑 Apache 配置文件(如 /etc/httpd/conf/httpd.conf 或 /etc/apache2/sites-available/000-default.conf),添加或修改一个 <virtualhost></virtualhost> 块:
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
DocumentRoot "/var/www/example_sub"
<Directory "/var/www/example_sub">
AllowOverride All
Require all granted
</Directory>
ErrorLog "/var/log/httpd/sub_error.log"
CustomLog "/var/log/httpd/sub_access.log" combined
</VirtualHost>关键点说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
ServerName是主域名,必须明确写出(用于直接访问example.com) -
ServerAlias *.example.com启用通配符匹配所有二级子域名 - 不要写
ServerName *.example.com—— Apache 不允许通配符作为ServerName - 确保该
<virtualhost></virtualhost>块在配置中位置合理,避免被其他更宽泛的虚拟主机覆盖
3. (可选但推荐)HTTPS 泛域名支持
若需 HTTPS,SSL 证书必须覆盖泛域名。申请或上传一张有效证书,其 Subject Alternative Name (SAN) 包含 *.example.com 和 example.com。配置示例:
<VirtualHost *:443>
ServerName example.com
ServerAlias *.example.com
DocumentRoot "/var/www/example_sub"
SSLEngine on
SSLCertificateFile "/path/to/fullchain.pem"
SSLCertificateKeyFile "/path/to/privkey.pem"
# 其他 SSL 设置...
</VirtualHost>注意:
• Let’s Encrypt 的 certbot 支持泛域名证书,但需通过 DNS-01 验证(不支持 HTTP-01);
• 宝塔面板用户可在「网站」→「添加站点」时直接输入 *.example.com,它会自动处理 Nginx/Apache 配置和证书申请逻辑。
4. 重启服务并验证
配置完成后务必重载 Apache:
- CentOS/RHEL:
sudo systemctl reload httpd - Ubuntu/Debian:
sudo systemctl reload apache2
测试方法:
- 浏览器访问
https://test.example.com,应打开你的站点 - 查看日志:
tail -f /var/log/httpd/sub_access.log,确认请求被正确路由 - 运行
sudo apachectl -S,检查输出中是否列出*.example.com在ServerAlias下

















