Apache 中不匹配域/子域的默认处理

Apache 中不匹配域/子域的默认处理

我有一个包含多个 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 页面,这只是我实际默认页面的副本。

相关内容