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!
答案 0 :(得分:0)
这是预期的行为。如果您使用IP(假设为http://123.123.123.123/
),Apache将使用123.123.123.123
作为主机名的HTTP。由于没有ServerName
或ServerAlias
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