我已为 Apache 配置了多个 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 文档根目录处理,对 example.example1.com 的请求由 example1-wc 文档根目录处理,而对 www.example2.com 的请求由 example2 文档根目录处理。
我可以将 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 的请求会自行产生无限重定向循环。无论我是否使用以下方法,都会发生这种情况:
<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?
答案1
我不确定这是否是你问题的根源,但你应该有指令
NameVirtualHost 111.111.111.111:80
NameVirtualHost 222.222.222.222:80
NameVirtualHost 333.333.333.333:80
因此完整配置将包含以下指令:
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(祝你好运理解它;-)
答案2
只是一个猜测,但你有没有尝试过把通配符子域名的定义后www.example1.com 的定义?