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

ServerName 本身不能匹配多个域名,它只接受一个精确值,作为该虚拟主机的“主标识”。要实现一个虚拟主机响应多个域名,必须搭配 ServerAlias 指令使用。
ServerName 和 ServerAlias 的分工
ServerName 是必需项,代表这个
- ServerName example.com —— 只能写一个,且必须真实存在、可解析
- ServerAlias www.example.com example.net test.example.com —— 一行写多个,用空格隔开
- ServerAlias *.demo.example.com —— 匹配所有 demo.example.com 的子域名
常见配置错误与修正
把多个域名塞进 ServerName 是典型错误,会导致 Apache 启动失败(语法错误)。正确做法是:主域名放 ServerName,其余全归 ServerAlias。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- ❌ 错误写法:ServerName example.com www.example.com
- ✅ 正确写法:ServerName example.com + ServerAlias www.example.com example.net
- 注意:ServerAlias 不区分大小写,但不支持正则表达式
域名匹配的实际顺序
当用户访问某个域名时,Apache 先比对 ServerName,没命中再逐个检查 ServerAlias 列表。只要任意一项匹配成功,请求就交给这个虚拟主机处理——不需要全部匹配,也不要求顺序一致。
- 例如访问 www.example.com,即使 ServerName 是 example.com,也能命中 ServerAlias 中的该项
- 如果两个虚拟主机都定义了相同的 ServerAlias,且没有更精确的 ServerName 匹配,Apache 会按配置文件中出现的顺序选择第一个
配合 DNS 和本地 hosts 测试
ServerAlias 生效的前提是请求头中的 Host 字段确实携带了对应域名。开发阶段可通过修改本地 /etc/hosts(Linux/macOS)或 C:\Windows\System32\drivers\etc\hosts(Windows)来模拟多域名解析:
- 127.0.0.1 example.com
- 127.0.0.1 www.example.com
- 127.0.0.1 demo.example.com
之后重启 Apache 并用 curl 或浏览器分别访问这些地址,验证是否都指向同一站点根目录。










