我有Apacheconfiguration几个IP地址:
Listen 111.111.111.111:80 Listen 111.111.111.111:443 Listen 222.222.222.222:80 Listen 222.222.222.222:443 Listen 333.333.333.333:80 Listen 333.333.333.333:443
(IP是假的)
我有几个VirtualHosts,其中之一是通配符子域。
<VirtualHost *:80> ServerName *.example1.com DocumentRoot /var/www/vhosts/example1-wc/docs </VirtualHost> <VirtualHost *:80> ServerName www.example1.com DocumentRoot /var/www/vhosts/example1/docs </VirtualHost> <VirtualHost *:80> ServerName www.example2.com DocumentRoot /var/www/vhosts/example2/docs </VirtualHost>
这工作正常。 请求www.example1.com在example1 docroot下提供,example.example1.com请求在example1-wc docroot下提供,www.example2.com请求为example2 docroot。
我可以将www.example2.com更改为使用特定的IP,但是如果将通配符vhost * .example1.com更改为特定的IP:
<VirtualHost 111.111.111.111:80> ServerName *.example1.com DocumentRoot /var/www/vhosts/example1-wc/docs </VirtualHost>
然后请求www.example1.com创build一个无限的redirect循环。 不pipe我是否使用:
<VirtualHost 222.222.222.222:80> ServerName www.example1.com DocumentRoot /var/www/vhosts/example1/docs </VirtualHost>
要么
<VirtualHost *:80> ServerName www.example1.com DocumentRoot /var/www/vhosts/example1/docs </VirtualHost>
为什么会发生这种情况,我怎样才能让每个虚拟主机在自己的IP上?
我不确定这是否是问题的根源,但是您应该有指示
NameVirtualHost 111.111.111.111:80 NameVirtualHost 222.222.222.222:80 NameVirtualHost 333.333.333.333:80
所以完整的configuration会有这些指令:
Listen 111.111.111.111:80 NameVirtualHost 111.111.111.111:80 <VirtualHost 111.111.111.111:80> ServerName *.example1.com DocumentRoot /var/www/vhosts/example1-wc/docs </VirtualHost> Listen 222.222.222.222:80 NameVirtualHost 222.222.222.222:80 <VirtualHost 222.222.222.222:80> ServerName www.example1.com DocumentRoot /var/www/vhosts/example1/docs </VirtualHost> Listen 333.333.333.333:80 NameVirtualHost 333.333.333.333:80 <VirtualHost 333.333.333.333:80> ServerName www.example2.com DocumentRoot /var/www/vhosts/example2/docs </VirtualHost>
但是这不应该出现在任何地方:
NameVirtualHost *:80
如果您有兴趣,请阅读以下内容: http : //httpd.apache.org/docs/2.2/vhosts/details.html (祝您好运!
只是一个疯狂的猜测,但你有没有尝试把www.example1.com定义后的通配符子域的定义?