为什么我访问未配置的 URL 时其他虚拟主机也会生效

为什么我访问未配置的 URL 时其他虚拟主机也会生效

我有一个根服务器,其中运行着 apache2,并带有一些虚拟主机配置来处理我的 2 个域和一些子域。

我意识到如果我尝试访问我的虚拟主机中配置的某个 url,那么我就会看到我配置的虚拟主机之一。

例如,我在 webmail.mydomain.com 上设置了一个网络邮件客户端。现在,如果我输入类似 hello.mydomain.com 的内容,它就会显示我的网络邮件客户端。完全没有任何内容指向我的网络邮件客户端或与 hello.mydomain.com 相关的任何内容。为什么会发生这种情况?

答案1

对于没有标头的请求,或者与任何已启用的 VirtualHostsHost:不匹配的请求ServerName, apache 将从其加载的第一个 vhost 提供该请求。ServerAlias

要解决此问题,请创建一个“默认”虚拟主机,该虚拟主机在所有其他虚拟主机之前加载。该虚拟主机的配置如下:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        Redirect 404 /
        ErrorDocument 404 "Site not found."
</VirtualHost>

对于任何不匹配的请求,这将显示 404 错误。

答案2

如果没有ServerName匹配给定的域,则仅显示启动 apache 时读取的第一个 vhost。我不知道是否有可能禁用此行为。一个 hack 解决方法是确保在所有其他 VirtualHost 块之前读取虚拟 vhost。

相关内容