Apache 的 ServerName 与 ServerAlias 怎么工作

ServerName 定义虚拟主机的主域名,ServerAlias 列出附加域名(支持泛域名)。Apache 按请求 Host 头匹配两者决定用哪个 VirtualHost 响应;都不匹配时用第一个 VirtualHost 兜底。

最佳实践
加密网络与通信桥梁插画

一句话回答:ServerName 指定虚拟主机的主域名**(唯一身份),ServerAlias 指定该站点的附加域名列表(可多个、支持 *.example.com 泛匹配)。Apache 先匹配连接的 IP/端口,再在候选 VirtualHost 中按 Host 匹配 的 ServerName/ServerAlias,命中哪个就用哪个的配置响应;一个都没命中时,由配置文件中该 IP/端口候选组最先加载的那个 VirtualHost 兜底处理。**

基本用法

<VirtualHost *:80>
    ServerName  example.com
    ServerAlias www.example.com blog.example.com
    DocumentRoot /var/www/example
</VirtualHost>

<VirtualHost *:80>
    ServerName  shop.example.com
    DocumentRoot /var/www/shop
</VirtualHost>

第一段的意思是:这个站点的主名是 example.com,同时用 www.example.com 和 blog.example.com 访问也由它响应。

匹配规则详解

  1. Apache 先按本地 IP/端口确定候选 VirtualHost,再读取 HTTP Host 头
  2. 依次与各 VirtualHost 的 ServerName、ServerAlias 比对
  3. 第一个匹配到的 VirtualHost 生效(之后的不再看)
  4. 全部不匹配 → 用最先加载的 VirtualHost(默认主机)响应

ServerAlias 支持泛域名:

ServerAlias *.example.com        # Apache 名称通配模式,不应等同于证书仅单层的通配规则
ServerAlias *.example.com example.*    # 可混写多条

常见坑

1. 忘了配 www

ServerName example.com 只匹配不带 www 的访问,用户输 www.example.com 会落到默认主机——站点"神秘打开错页面"的经典原因。正确做法就是 ServerAlias www.example.com。

2. 默认主机的陷阱

"都不匹配用第一个 VirtualHost"意味着:乱配的域名、直接 IP 访问、扫描器流量都会落到它上面。最佳实践是显式建一个兜底 VirtualHost 放在最前:

<VirtualHost *:80>
    ServerName default.invalid
    <Location "/">
        Require all denied
    </Location>
</VirtualHost>

3. 配置顺序

Apache 按文件加载顺序(sites-enabled 里按文件名排序)确定 VirtualHost 优先级,同名匹配先到先得。

4. 改完验证

apache2ctl -S        # 列出所有 VirtualHost 及其 ServerName/Alias 映射
apachectl configtest # 语法检查
sudo systemctl reload apache2

apache2ctl -S 的输出能直接看出每个域名落到哪个 VirtualHost,排查匹配问题必备。再分别请求主域名和别名,检查页面是否属于预期站点。

需要集中核对请求时,在访问日志中记录请求 Host(%{Host}i)和实际服务虚拟主机(%v),再用 DataKit 文件采集与解析规则提取这两个字段。比较同一请求的两者,才能判断是否误入默认主机。

常见问题(FAQ)

Q:ServerAlias 和直接建两个 VirtualHost 有什么区别?

A:用 Alias 时多个域名共享同一份配置(DocumentRoot、日志、重写规则);建两个 VirtualHost 则可分别配置。内容完全相同的镜像站点用 Alias,有差异需求用独立 VirtualHost。

Q:ServerName 可以不写域名写 IP 吗?

A:可以但不推荐。IP 直接访问通常由默认主机处理;要精确控制 IP 访问的行为,建一个 ServerName 为该 IP 的 VirtualHost 或默认兜底主机。

Q:HTTPS 下 ServerName/Alias 逻辑一样吗?

A:先按 IP/端口选候选组,TLS 握手可用 SNI 提前选择虚拟主机和证书,HTTP 阶段再按 Host 匹配。证书必须覆盖客户端请求的域名;没有 SNI 时通常使用该地址组首个虚拟主机的 TLS 配置。

核查依据

本文依据官方文档核对,示例未在实际业务环境运行;上线前请按部署版本、权限与数据范围验证。


延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台