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

Jak*_*son 5 centos virtualhost centos6 apache-2.2

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

如果有人通过 IP 访问服务器,我们希望设置一个默认的空白页面。我认为只需为 IP 地址设置另一个VirtualHost条目就可以做到这一点,而且看起来确实如此,但现在访问任何其他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>
Run Code Online (Sandbox Code Playgroud)

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

And*_*w B 2

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

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

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

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

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