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

Rya*_*all 12 apache-http-server virtual-host

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

Mor*_*oth 12

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

  • 你的 apache2 配置文件是如何布局的?或者你用的是哪个操作系统?Apache 按照一定的顺序读取配置,它看到的第一个 VirtualHost 是默认的。它接收来自未知主机名的所有流量。因此,如果您只有一个配置文件,那么第一个 VirtualHost 就是它。如果您有多个,就像在大多数 linux 上一样,它可能是一个称为 0default 左右的... (2认同)

小智 5

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

Include path/to/site/confs/*httpd.conf
Run Code Online (Sandbox Code Playgroud)

组织您的站点 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>
Run Code Online (Sandbox Code Playgroud)

请务必将端口替换为您的 httpd 侦听的任何端口。或者,如果您让 httpd 监听特定接口,则需要为每个接口添加一个包罗万象的东西,如下所示:

<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>
Run Code Online (Sandbox Code Playgroud)

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