servername仅支持单个精确域名,不参与子域名解析;子域名响应需serveralias配合dns泛解析和mod_vhost_alias动态映射实现。

Apache 的 ServerName 本身不参与子域名“解析”,它只做精确匹配,真正实现子域名响应靠的是 ServerAlias + DNS 泛解析 + 动态目录映射三者配合。关键不是 ServerName 怎么“写子域名”,而是怎么用它和配套指令一起让子域名生效。
ServerName 必须写一个真实主域名
它只能是一个完整、可解析的域名,不能带星号、不能多个、不能是子域名占位符:
- 正确:ServerName example.com(推荐设为根域名)
- 也正确:ServerName www.example.com(若你主推 www)
- 错误:ServerName *.example.com(语法非法,启动失败)
- 错误:ServerName a.example.com b.example.com(空格分隔多个 → 解析报错)
DNS 先做泛解析,把子域名指向服务器 IP
在域名控制台添加一条 A 记录:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 主机记录:*(星号)
- 记录值:你的服务器公网 IP
- 验证方式:
dig test.example.com +short应返回该 IP
VirtualHost 中用 ServerAlias 声明通配子域
必须和 ServerName 同处一个 <virtualhost></virtualhost> 块内:
-
ServerAlias *.example.com—— 匹配所有一级子域名(如 api.example.com、blog.example.com) -
ServerAlias www.example.com example.com—— 可同时加具体别名 - 注意:
ServerAlias example.*或ServerAlias *.sub.example.com不被支持
启用 mod_vhost_alias 并设置动态路径
仅靠 ServerAlias 不会自动路由到不同目录,必须启用模块并指定如何提取子域名:
- 启用模块:
a2enmod vhost_alias(Debian/Ubuntu)或确认LoadModule vhost_alias_module已开启 - 配置示例:
VirtualDocumentRoot /var/www/%1→api.example.com自动映射到/var/www/api - 加
UseCanonicalName Off,否则 Host 头会被忽略,%1 取不到值 - 确保对应目录存在且 Apache 用户有读+执行权限(
chmod 755 /var/www/api)










