我有一个根服务器,其中运行着 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。