servername必须且只能写一个真实、完整、不带通配符的域名(如example.com),作为虚拟主机唯一标识;serveralias用空格分隔多个别名或支持*.example.com等通配符,用于扩展匹配,二者须同处一个virtualhost块内。

ServerName 是虚拟主机的唯一标识,必须写一个真实、完整、不带通配符的域名;ServerAlias 是它的补充,可支持泛域名(如 *.example.com),但真正实现泛解析还需配合 mod_vhost_alias 和 VirtualDocumentRoot(或重写规则)。
ServerName 和 ServerAlias 的定位不同
ServerName 不是“可选项”,而是 Apache 启动时强制校验的必需字段。它必须是一个能被 DNS 解析的精确域名,比如 example.com 或 www.example.com。多个值、带星号、加引号、空格分隔,都会导致配置无效甚至服务启动失败。
ServerAlias 则专为扩展匹配而设,一条指令可写多个域名,用空格分隔,也支持通配符。例如:
ServerAlias www.example.com blog.example.com api.example.com-
ServerAlias *.example.com(合法,用于泛解析入口)
Apache 匹配 Host 请求头时,先比对 ServerName,再逐个检查 ServerAlias 列表,任一命中即交由该虚拟主机处理。
泛域名解析不能只靠 ServerAlias
写了 ServerAlias *.example.com 只是让请求“进得来”,但 Apache 还需知道怎么把 a.example.com、b.example.com 映射到对应目录。这需要:
- 启用
mod_vhost_alias模块(宝塔默认开启;手动环境需确认httpd.conf中LoadModule vhost_alias_module modules/mod_vhost_alias.so未被注释) - 在
<virtualhost></virtualhost>块中配置VirtualDocumentRoot,例如:VirtualDocumentRoot /www/wwwroot/example_sub/%-2+
其中%-2+表示取 Host 头倒数第二段及之后(test.api.example.com→api.example.com) - 若只处理一级子域(如
shop.example.com),可用%1直接提取前缀,对应目录如/www/wwwroot/shop
注意:目标目录必须真实存在,且 Apache 运行用户(如 www-data 或 www)有读和执行权限。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
多项目泛解析要按顺序写配置
Apache 按配置文件从上到下的顺序匹配虚拟主机,一旦命中就停止。所以如果有特殊子域需单独处理,必须把它放在泛匹配块之前。
例如:
- 想让
admin.example.com走管理后台,其余子域走通用站点 - 就要先写一个
<virtualhost></virtualhost>块,ServerName admin.example.com - 再写另一个块,
ServerName example.com+ServerAlias *.example.com
如果把泛匹配块放前面,admin.example.com 就永远进不了管理后台配置。
宝塔用户不必手写全部配置
在宝塔面板新建站点时填写 *.example.com,它会自动完成三件事:
- 启用
mod_vhost_alias - 生成含
ServerAlias *.example.com的配置 - 设置
VirtualDocumentRoot或用RewriteRule统一转发
你仍会在配置文件里看到 ServerName example.com —— 这不是错误,而是必须项,也是唯一合法写法。










