我让 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是假的)
我有几个 VirtualHost,其中一个是通配符子域。
<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 的请求会在其自身上创建一个无限重定向循环。无论我是否使用,都会发生这种情况:
<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?
我不确定这是否是您问题的根源,但您可能应该有指令
因此,完整的配置将包含以下指令:
但这不应该出现在任何地方:
如果您有兴趣,这里有一些进一步的阅读:http ://httpd.apache.org/docs/2.2/vhosts/details.html (祝你好运;-)
只是一个疯狂的猜测,但是您是否尝试将通配符子域的定义放在www.example1.com 定义之后?