DocumentRoot是否设置为virtualHost的docRoot?

时间:2013-05-13 09:27:25

标签: apache2 centos document-root virtual-hosts

OS:centOS 6.3 Final

我已经安装了mysql和apache2(httpd)软件包并更改了/etc/httpd/conf/httpd.conf中的配置,如下所示:

<VirtualHost *:80>
    DocumentRoot /var/www/html/wordpress/
    ServerName www.asterix.int
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /var/www/html/staticSite/
    ServerName www.meins.lan
    ServerAlias www.deins.lan
    ServerAlias www.obelix.int
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /var/www/html/joomla/
    ServerName www.example.com
    ServerAlias www2.example.com
    ServerAlias www3.example.com
</VirtualHost>

所有ServerName和ServerAlias都正常工作,我可以访问3页。

但是当我试图通过服务器的ip访问页面时,会发生奇怪的事情(至少对我而言)。 apache2返回第一个定义的virtualHost的索引页面(在本例中为wordpress)。我已经尝试了所有3个虚拟主机并获得相同的结果。

这是正常行为还是我做错了?

如果这是正常行为:我可以专门为所有对ip的请求设置DocumentRoot吗?

Thx!

2 个答案:

答案 0 :(得分:0)

这是预期的行为。如果您使用IP(假设为http://123.123.123.123/),Apache将使用123.123.123.123作为主机名的HTTP。由于没有ServerNameServerAlias 123.123.123.123的VirtualHost,因此使用了第一个VirtualHost。

因此,如果您想要一个仅监听http://123.123.123.123/的VirtualHost,您只需创建一个VirtualHost:

<VirtualHost *:80>
    DocumentRoot /var/www/html/my-ip-site/
    ServerName 123.123.123.123
</VirtualHost>

答案 1 :(得分:0)

这是正常行为。 您正在使用名为基于名称的虚拟主机的vhost方法。您可以想象,这意味着apache的“路由”只能由HTTP请求中的主机名完成,具体取决于配置中的ServerName和ServerAlias指令。

作为对服务器IP的请求 - 例如1.2.3.4 - 无法路由到任何已定义的vhost,apache采用默认的虚拟主机。 默认的虚拟主机或多或少是第一个定义的虚拟主机。 接受IP上的请求,因为您使用了通配符定义*:80。

您可以通过apache检查apache中设置的虚拟主机

# command apache2 -S