Apache 不匹配的子域名被随机域名捕获

Apache 不匹配的子域名被随机域名捕获

你好,正如标题所说,由于某种原因,我的 apache 正在捕获特定域中的所有随机子域,但我无法弄清楚原因。

我目前有几个子域名,bgp.example.com login.example.com www.example.com 但是如果我输入随机字母:akegmeakgmaekm.example.com 它似乎总是默认回到 bgp.example.com 即使在我的配置文件中我有一个提供错误页面的 000-default 文件。

如果您访问 ekmgakmgkem.google.co.uk,它会立即显示“无法找到该页面”错误或类似信息(如果您的 ISP 已这样设置)。

bgp.example.com 实际上是一个控制面板,我不希望任何随机输入的子域名出现在那里,我希望 apache 只显示 404 或类似于 google 的内容。

提前致谢。

答案1

Apache 使用以下过程来查找最佳匹配的虚拟主机:

  1. 查找与 IP 和端口匹配的虚拟主机列表,如果未找到则使用通配符。在您的例子中,默认虚拟主机中设置了通配符。
  2. 确定我们是否要使用基于 IP 或基于名称的虚拟主机。如果只有一个 IP 和端口选项匹配,则使用基于 IP 的虚拟主机并选择该虚拟主机。
  3. 如果无法使用基于 IP 的匹配(因为该 IP 和端口上有多个 vhost),则获取 vhost 候选列表(按 IP 和端口)并尝试将 ServerName 和 ServerAlias 指令与 Host HTTP 请求标头进行匹配。
  4. 如果在 3 中找不到最佳匹配,则默认为在该 IP 和端口上找到的第一个 vhost。
  5. 如果未找到匹配的 IP 和端口,则尝试匹配通配符虚拟主机,例如 000-default。

根据您的症状,我猜测您正在使用基于名称的虚拟主机,而 Apache 从未进入步骤 5,因为它在步骤 4 中使用了最佳的基于 IP 的匹配。您应该能够通过设置显式 NameVirtualHost 来解决此问题,其中 IP:Port 为 000-default,服务器名称按字母顺序排列在第一位。

您可以找到有关 Apache 的 vhost 选择过程的更多详细信息这里

相关内容