我们在一台有多个条目的服务器上运行 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
不匹配时)。为了获得您想要的行为,我认为您需要这样做:ServerName
ServerAlias
- 创建一个带有空白页的默认虚拟主机 *:80。
- 调整您的
somesite.com
虚拟主机,使其ServerAlias
包含您不想击中默认虚拟主机的每个名称。
希望有人能有一个更接近实现您所期望的最终结果的解决方案;已经有一段时间了,我有兴趣从中学习。