为什么创建 Apache 通配符子域和 IP 会产生无限重定向?

为什么创建 Apache 通配符子域和 IP 会产生无限重定向?

我已为 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 的定义?

相关内容