我有一个包含多个 VirtualHosts 的 Apache2 配置。我的 DNS 设置为接受*.<domain>.<tld>
多个域。一切正常,但如果我转到,something-random-here.example.com
似乎会选中无效的 VirtualHost(我猜是它找到的第一个或最后一个)。有没有办法告诉 Apache,如果所有 VirtualHost 条目都与域或子域不匹配,则使用某些规则?我最好返回 404。
答案1
如果没有匹配的名称,Apache 将使用第一个虚拟主机。只需将新的虚拟主机配置为第一个,并使用随机名称,显示您喜欢的任何内容 - 或返回 404 页面。
答案2
通配符包括您的站点配置文件:
Include path/to/site/confs/*httpd.conf
组织您的站点配置文件,以便它们按预期顺序加载。示例...
01-httpd.conf
02-site1-httpd.conf
03-site2-httpd.conf
ETC...
Apache 将按顺序读取这些内容。然后创建一个始终最后加载的虚拟主机,以捕获任何不匹配的虚拟主机并返回 404,而不是加载默认站点。
99-catchall-httpd.conf
<VirtualHost *:8080>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost *:8443>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
确保将端口替换为您的 httpd 监听的任何端口。或者,如果您让 httpd 监听特定接口,则需要为每个接口添加一个 catchall,如下所示:
<VirtualHost 192.168.1.101:8080>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.101:8443>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.102:8080>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.102:8443>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
希望这能有所帮助。我使用此方法按我指定的顺序加载站点,并防止不匹配的虚拟主机无意中加载意外的站点。
答案3
如上所述Moritz Both
,如果 Apache2 与您请求的任何虚拟主机都不匹配,它将使用它找到的第一个虚拟主机。
首次安装 Apache2 时,会有一个默认网站配置文件,您可以将其用作模板、修改或删除,我一直想知道 000-default.conf 到底是做什么用的,因为他们也有一个 default.conf。读完上述内容后Moritz Both
,现在一切都更有意义了。
我对我的服务器所做的是将默认主机名(网站)的配置复制到 000-default.conf 文件和a2ensite 000-default
。
现在,每次我的网站有不匹配的域名请求时,它都会提供 000-default 页面,这只是我实际默认页面的副本。