设置 Apache 虚拟主机的默认页面

设置 Apache 虚拟主机的默认页面

我们在一台有多个条目的服务器上运行 Apache VirtualHost。每当有人通过其 IP 地址 ( http://198.147.xx.xx) 访问服务器时,就会出现一个网站VirtualHost。这不是我们想要的。如果直接访问 IP,我们宁愿出现一个空白页。我不确定所选网站是否只是虚拟主机条目列表中的第一个网站,还是其他什么。

如果有人通过 IP 访问服务器,我们希望设置一个默认的空白页。我认为只需VirtualHost为 IP 地址设置另一个条目就可以了,而且似乎也行,但现在访问任何其他VirtualHost网站都会导致相同的空白默认页面。以下是我们的配置示例:

<VirtualHost *:80>
    DocumentRoot /vhosts/somesite.com/public
    ServerName somesite.com
    <Directory "/vhosts/somesite.com/public">
        allow from all
        Options +Indexes
        AllowOverride All
    </Directory>
    ServerAlias www.somesite.com
</VirtualHost>

<VirtualHost 198.147.XX.XX:80>
    DocumentRoot /vhosts/default/public
    <Directory /vhosts/default/public>
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>

我们这里做错了什么?有没有更好的方法可以为通过 IP 地址访问服务器的任何人设置默认登录页面?

答案1

如果我没记错的话,虚拟主机的行为如下:

  • httpd搜索具有最具体限定符的虚拟主机。(IP 地址或主机头(如果NameVirtualHost已声明))
  • 如果没有具体条目,则第一的定义的虚拟主机被使用。这称为默认虚拟主机当请求没有标Host头时通常会提供什么服务。(即通过 IP 地址)

您现在遇到的问题是,基于 IP 的虚拟主机比通用的默认虚拟主机更具体(至少在标头与或Host不匹配时)。为了获得您想要的行为,我认为您需要这样做:ServerNameServerAlias

  • 创建一个带有空白页的默认虚拟主机 *:80。
  • 调整您的somesite.com虚拟主机,使其ServerAlias包含您不想击中默认虚拟主机的每个名称。

希望有人能有一个更接近实现您所期望的最终结果的解决方案;已经有一段时间了,我有兴趣从中学习。

相关内容