![为什么创建 Apache 通配符子域和 IP 会产生无限重定向?](https://linux22.com/image/482094/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%88%9B%E5%BB%BA%20Apache%20%E9%80%9A%E9%85%8D%E7%AC%A6%E5%AD%90%E5%9F%9F%E5%92%8C%20IP%20%E4%BC%9A%E4%BA%A7%E7%94%9F%E6%97%A0%E9%99%90%E9%87%8D%E5%AE%9A%E5%90%91%EF%BC%9F.png)
我已为 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 的定义?