一个 块可托管多个域名,关键在于 ServerName 仅设一个主域名(如 example.com),ServerAlias 则用空格分隔多个别名(如 www.example.com example.net),支持 *.example.com 通配符;HTTP 和 HTTPS 必须分别配置独立块,且 ServerAlias 需各自重复声明,避免别名冲突、DNS 解析、端口监听及权限配置等前置环节失效。

用一个 块托管多个域名,关键不是堆配置,而是让 ServerName 和 ServerAlias 各司其职——前者定主入口,后者管所有别名,全部指向同一个 DocumentRoot。
ServerName 与 ServerAlias 的分工必须明确
ServerName 只能写一个域名,比如 example.com,它是 Apache 匹配请求时的“第一顺位”。ServerAlias 才是承载多域名的核心,支持空格分隔的多个值,例如:
www.example.com example.net www.example.net *.shop.example.com
注意通配符只认 *.example.com 这种前缀形式,不支持 ex*.com 或 example.*。
- 错误写法:
ServerName example.com www.example.com example.net→ 语法报错,Apache 启动失败 - 正确写法:
ServerName example.com+ServerAlias www.example.com example.net - 别名中含通配符时,确保 DNS 已为对应子域(如
blog.example.com)配置了 A 记录
HTTP 和 HTTPS 必须分开配置两个 VirtualHost 块
80 端口和 443 端口在 Apache 中是完全独立的监听上下文。哪怕内容完全一样,ServerAlias 也得各自写一遍,不能复用或省略。
- HTTP 块示例:
ServerName example.com ServerAlias www.example.com example.net ... - HTTPS 块示例:
ServerName example.com ServerAlias www.example.com example.net SSLEngine on SSLCertificateFile ... - 漏配 HTTPS 的
ServerAlias,会导致访问https://www.example.com时匹配失败,可能跳转到默认站点或报错
避免别名冲突和路由错位
如果多个 块里都写了相同的 ServerAlias example.com,Apache 只采用配置文件中最先出现的那个,后面的静默失效——这常导致你以为绑定了,实际请求被引到了别的站。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 检查所有已启用的站点配置(
/etc/apache2/sites-enabled/),搜索ServerAlias是否重复 - 临时把
LogLevel设为info,查 error log 中类似VHOST: Matched servername 'www.example.com'的日志行,确认实际命中的是哪个块 - 测试时用
curl -H "Host: example.net" http://your-server-ip绕过 DNS,直验路由逻辑
生效前务必验证基础环节
再标准的 ServerAlias 配置,也会卡在前置环节上:
- DNS:每个域名(含
www、二级域、通配符覆盖的子域)都必须有 A 记录指向服务器真实 IP - 端口监听:确认
ports.conf里有Listen 80和Listen 443,且没被防火墙拦截 - 模块启用:Debian/Ubuntu 下运行
a2enmod vhost_alias;RHEL/CentOS 检查httpd -M | grep vhost - 权限与路径:确保
DocumentRoot目录存在,Apache 用户(如www-data)有读+执行权限,并在块中写了Require all granted










