servername仅支持单个主域名,多域名必须用serveralias配合实现;servername为必需项且唯一,serveralias可配置多个空格分隔的域名或通配符,匹配时优先检查servername再遍历serveralias列表。

ServerName 本身不能配多个域名,它只接受一个精确值,代表这个虚拟主机的“主域名”或官方标识。多个域名共存时,正确做法是:一个主域名放 ServerName,其余全交给 ServerAlias。
ServerName 和 ServerAlias 各司其职
-
ServerName是必需项,只能写一个,且必须真实可解析(比如example.com) -
ServerAlias是可选项,专为多域名设计,支持:- 多个域名用空格分隔(如
www.example.com example.net demo.example.com) - 通配符子域名(如
*.example.com匹配a.example.com、b.example.com) - 不区分大小写,但不支持正则表达式
- 多个域名用空格分隔(如
典型配置示例
<virtualhost>
ServerName example.com
ServerAlias www.example.com example.net *.demo.example.com
DocumentRoot /var/www/example
<directory>
Require all granted
AllowOverride All
</directory></virtualhost>
访问 example.com、www.example.com、example.net 或任意 xxx.demo.example.com 都会命中这个虚拟主机。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
常见错误与避坑点
- ❌ 把多个域名塞进
ServerName(如ServerName example.com www.example.com)→ Apache 启动失败,报语法错误 - ❌ 忘记启用虚拟主机模块或未包含
httpd-vhosts.conf→ 配置不生效 - ❌
ServerAlias写在<virtualhost></virtualhost>外部 → 被忽略,不起作用 - ❌ 混用 IP 绑定和
*端口(如NameVirtualHost 192.168.1.100:80但<virtualhost></virtualhost>)→ 匹配紊乱,可能只生效第一个
匹配顺序很关键
Apache 处理请求时按固定顺序检查:
- 先比对
ServerName - 不匹配再逐个比对
ServerAlias列表(从左到右,不依赖书写顺序) - 只要其中一个匹配成功,就交由该
<virtualhost></virtualhost>处理,无需全部匹配
所以 ServerName example.com + ServerAlias www.example.com 和反过来写效果一样,但语义上推荐把主域名放 ServerName。










