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


12

我有一个带有多个VirtualHosts的Apache2配置。我的DNS设置为*.<domain>.<tld>在多个域上接受。一切工作正常,但是如果我转至something-random-here.example.com我,似乎选择了一个无效的VirtualHost(我猜它找到的第一个或最后一个)。如果没有VirtualHost条目与域或子域匹配,是否可以告诉Apache使用某些规则?我最好返回404。

Answers:


12

如果没有名称匹配,Apache将使用第一个虚拟主机。只需将新的虚拟主机配置为第一个具有随机名称的虚拟主机,即可显示任意内容-或返回404页面。


谢谢,但是请您详细说明一下?我无法使它正常工作。
Ryall

2
您的apache2配置文件如何布置?或者您使用哪个操作系统?Apache按特定顺序读取配置,它看到的第一个VirtualHost是默认的。它接收来自未知主机名的所有流量。因此,如果您只有一个配置文件,则第一个VirtualHost是它。如果您有多个,例如在大多数Linux上,则可能是称为0default的那个……
Moritz两者

我在中放入了一些默认配置ports.conf。这没有用,因为在虚拟主机上使用<ip>:80时,我尝试匹配*:80。相反,我必须为每个IP创建一个单独的默认条目,并且现在可以使用了。
Ryall

我的第一个或最后一个v-host文件都没有使用。我认为apache已经改变。
Cobolt

4

通配符包括您的站点配置文件:

Include path/to/site/confs/*httpd.conf

组织您的站点conf文件,以便按预期顺序加载它们。例...

01-httpd.conf

02-site1-httpd.conf

03-site2-httpd.conf

等等...

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>

希望这可以帮助。我使用此方法按指定的顺序加载站点,并防止不匹配的虚拟主机无意中加载意外站点。


是否应该从全部规则中删除“ ServerAlias *”?
Ahm3d说

我想没关系。如果综合解决方案之前的所有虚拟主机均未处理该请求,则这些虚拟主机将返回404响应。我看不出必须删除ServerAlias *的原因,但是它们可能不必要地具体。
詹森·斯洛伯茨基

0

如前所述Moritz Both,如果Apache2与您请求的主机不匹配,它将使用它找到的第一个虚拟主机。

首次安装Apache2时,有一个默认的网站conf,您可以将其用作模板,修改或删除,而我一直想知道000-default.conf的实际用途,因为它们也有default.conf。阅读完Moritz Both所说的内容后,现在一切都变得有意义了。

我为服务器执行的操作是将默认主机名(网站)的配置复制到000-default.conf文件和a2ensite 000-default

现在,每当我的网站收到无与伦比的域名请求时,它都会提供000默认页面,这只是我实际默认页面的副本。


1
我也这样做,但是我的不匹配/默认主机将重定向发送到正确的顶级站点,该站点还将显示的URL也更改为正确的URL。
ivanivan

那真是个好主意!我没想到。我一定会像这样实现我的网站:)
Newteq Developer

由于某种原因,我似乎无法使我的ssl(默认页面)重定向。我有,<VirtualHost *:443> ... Redirect / https://baseurl/ ... </VirtualHost> 但网址保持不变。对于非ssl版本,我已经做了同样的事情,它可以正确重定向。有任何想法吗?
Newteq开发人员
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.