servername是虚拟主机唯一主域名,必须明确且仅一个完整域名;serveralias用空格分隔多个别名及前缀通配符(如*.example.com),二者须同处一个virtualhost块内,http与https需分别配置。

ServerName 是虚拟主机的“主身份”,必须且只能写一个完整域名,比如 example.com;ServerAlias 是它的“扩展名片”,负责收拢所有其他能访问同一站点的域名,比如 www.example.com example.net *.example.com。两者必须在同一个 <virtualhost></virtualhost> 块里,缺一不可,位置也不能错。
ServerName 必须明确、唯一、合法
它不是可选项,Apache 启动时会检查:没写会警告,写多个或带空格、引号、通配符、IP 地址,直接报错退出。常见错误写法:ServerName example.com www.example.com 或 ServerName "example.com" —— 这些都会让配置加载失败。
- 正确写法只有一种:一行,一个完整域名,不加引号、不带协议和端口,例如
ServerName example.com - 它作为匹配优先级最高的字段,请求 Host 头一旦完全匹配 ServerName,就立刻交由该虚拟主机处理
- 即使你只打算用 www 开头的域名,也得选一个作 ServerName(如
www.example.com),另一个(example.com)放进 ServerAlias
ServerAlias 承担多域名接入职责
它专为“一站多域”而设,语法宽松但规则清晰:多个域名用空格分隔,支持前缀通配符(如 *.example.com),但不支持后缀或中间通配(如 example.* 或 ex*.com 不合法)。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 可以写多个具体域名:
ServerAlias www.example.com example.net www.example.net - 可以混用通配符与具体域名:
ServerAlias www.example.com *.example.com - 不能加引号、不能用逗号或换行分隔,否则 Apache 当作单个非法字符串处理
- 通配符仅匹配一级子域,
*.example.com能匹配blog.example.com,但不匹配dev.blog.example.com
HTTP 和 HTTPS 必须分别配置
两个协议监听不同端口(80 和 443),Apache 视为完全独立的虚拟主机。ServerAlias 不跨块生效——你在 <virtualhost></virtualhost> 里写的 ServerAlias,对 <virtualhost></virtualhost> 没有任何作用。
- HTTPS 块中必须重复声明 ServerName 和全部需要的 ServerAlias
- 同时确保 SSL 证书覆盖这些域名(尤其是通配符证书需匹配
*.example.com) - 若只配了 HTTP 的 ServerAlias,HTTPS 请求就会落到默认站点或返回 404
配置生效前的关键检查项
ServerAlias 写对只是第一步,DNS、监听、权限、语法任一环节出问题,照样无法响应请求。
- DNS 或本地 hosts 文件必须把所有 ServerAlias 域名解析到服务器 IP
- 确认 Apache 已监听对应端口:
Listen 80和Listen 443都要存在,且模块mod_ssl已启用 - 运行
apachectl configtest校验语法,无报错再 reload - 避免多个
<virtualhost></virtualhost>块共用相同 IP+端口却未设置NameVirtualHost(Apache 2.2 需显式声明,2.4+ 默认开启,但旧配置残留可能干扰)










