Apache默认虚拟主机由配置顺序决定,第一个加载且匹配IP和端口的<VirtualHost>块即为默认主机;可用_default_:80精准捕获未声明IP的请求,并需确保虚拟主机机制启用、语法正确。

Apache 默认虚拟主机不是靠“设为默认”触发的,而是由配置顺序和监听规则决定的——它自动把第一个加载的、匹配请求 IP 和端口的 <VirtualHost> 当作兜底主机。只要理解这个逻辑,配置就很简单。
默认主机靠顺序决定
Apache 不认 “default” 这个词,只看 <VirtualHost> 块在配置文件里出现的先后位置。谁排最前,谁就是默认主机。
- 比如你写了两个
<VirtualHost *:80>:第一个配了ServerName site-a.com,第二个配了site-b.com;那么访问unknown.test(没配过的域名)就会落到第一个上 - 想让某个站点当兜底?把它对应的
<VirtualHost>放在所有其他块的最前面 - 用
httpd -S(Linux/macOS)或httpd.exe -S(Windows)可验证:输出里标有 default server 的那一行就是当前默认主机
用 _default_:80 精准捕获漏网请求
*:80 是通配所有 IP,而 _default_:80 是专门处理“Apache 监听了但没被任何 <VirtualHost> 显式声明的 IP”的请求,是更严格的兜底方式。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 例如服务器有 IP
192.168.1.10和10.0.0.5,但只在配置里写了<VirtualHost 192.168.1.10:80>,那发往10.0.0.5:80的请求就归<VirtualHost _default_:80>管 - 写法:
<VirtualHost _default_:80>或更通用的<VirtualHost _default_:*>(前提是对应端口已通过Listen启用) - 注意:
_default_和*不等价——前者是“未覆盖的 IP”,后者是“所有 IP”
常见兜底行为设置
默认主机不该返回空白页或暴露目录结构,建议明确设定响应行为:
-
重定向到主站:加一行
Redirect / https://www.example.com/ -
返回友好提示页:设
DocumentRoot指向一个静态 HTML 文件夹(如/var/www/default),页面内容写“该域名未配置” -
拒绝非法 Host 头:配合
mod_rewrite或mod_headers,对不期望的Host请求直接返回403 Forbidden - 注意:
ServerName必须存在(哪怕填default.invalid),否则 Apache 启动报错 VirtualHost must be non-null
确保虚拟主机机制已启用
默认主机生效的前提是整个虚拟主机功能已打开:
- 确认主配置中已取消注释类似
Include conf/extra/httpd-vhosts.conf或IncludeOptional sites-enabled/*.conf的行 - 检查是否已声明监听端口,如
Listen 80(HTTP)或Listen 443(HTTPS) - 运行
apache2ctl -t(Debian/Ubuntu)或httpd -t(CentOS/RHEL)验证语法,输出 Syntax OK 才算通过

















