apache默认虚拟主机是第一个成功加载且监听相同ip和端口的块,由配置顺序决定而非名称或开关;可用httpd -s命令验证,默认行标有“default server”;推荐用_default_:80精准兜底未声明ip的请求。

Apache 主配置文件中定义了多个 <virtualhost></virtualhost> 块时,第一个成功加载且监听相同 IP 和端口的块,就是默认虚拟主机。
它不是靠名字、标签或开关决定的,而是由加载顺序和匹配规则共同作用的结果。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
默认主机由顺序和匹配决定
- Apache 逐行读取配置,遇到第一个语法正确、监听端口与请求匹配(比如
*:80或_default_:80)的<virtualhost></virtualhost>,就把它当作兜底主机。 - 后续的
<virtualhost></virtualhost>只有在 Host 头明确匹配其ServerName或ServerAlias时才会被选中;否则全部交由第一个块处理。 - 即使第一个块只配了
ServerName example.com,访问unknown.test也会落到它身上——只要请求发到了该 IP:端口,且没被后面其他块更精确匹配。
如何确认哪个是当前默认主机
运行以下命令查看解析结果:
- Linux/macOS:
httpd -S或apache2ctl -S - Windows:
httpd.exe -S
输出中带default server标记的那一行,就是实际生效的默认虚拟主机。
更精准的兜底方式:用 _default_
-
<virtualhost _default_:80></virtualhost>专用于捕获“Apache 监听了但未被任何<virtualhost></virtualhost>显式声明的 IP 地址”上的请求。 - 比如服务器有
192.168.1.10和10.0.0.5两个 IP,你只写了<virtualhost></virtualhost>,那么访问10.0.0.5:80就会命中_default_:80。 - 注意:
_default_≠*,前者是“未覆盖的 IP”,后者是“所有 IP”。
配置前必须确保的几件事
- 主配置中已启用虚拟主机机制,例如取消注释
Include conf/extra/httpd-vhosts.conf或IncludeOptional sites-enabled/*.conf。 -
Listen 80(或其他对应端口)已正确定义。 - 每个
<virtualhost></virtualhost>内必须有ServerName(哪怕填default.invalid),否则启动报错VirtualHost must be non-null。 - 所有配置语法需通过
httpd -t验证为Syntax OK。
不复杂但容易忽略。










