Apache2 在使用 IP 虚拟主机时忽略通配符虚拟主机

问题描述 投票:0回答:0

我在 apache2 服务器上有几个虚拟主机。它们可以从 Internet(外部接口)和 Intranet(内部接口)访问。 现在,对于一个虚拟主机,如果来自互联网而不是来自内部网,我想提供不同的内容。

我的虚拟主机有这样的配置:

<VirtualHost *:443>
        ServerName site1.example.com
        ProxyPass / <ip_1>:443/
        ProxyPassReverse / <ip_1>:443/
...

<VirtualHost *:443>
        ServerName site2.example.com
        ProxyPass / <ip_2>:443/
        ProxyPassReverse / <ip_2>:443/
...

现在,我希望一个虚拟主机(这里是 site1.example.com)在从 Intranet 访问时服务(proxypass)不同的服务器,所以我修改了它的配置:

<VirtualHost <ip_3>:443>
        ServerName site1.example.com
        ProxyPass / <ip_3>:443/
        ProxyPassReverse / <ip_3>:443/
...

<VirtualHost *:443>
        ServerName site1.example.com
        ProxyPass / <ip_1>:443/
        ProxyPassReverse / <ip_1>:443/
...

<VirtualHost *:443>
        ServerName site2.example.com
        ProxyPass / <ip_2>:443/
        ProxyPassReverse / <ip_2>:443/
...

此配置允许我在从 Intranet 访问时访问

<ip_3>:443/
(IP 匹配第一个条目),在从 Internet 访问时访问
<ip_1>:443/

问题是,当从内网访问所有其他虚拟主机时,它们都被重定向到

<ip_3>:443/
(基于IP的虚拟主机),而它们的名称与ServerName不匹配,并且有一个具有通配符IP(
*:443
)匹配的虚拟主机名字。

如果我理解,apache 会找到一个与 vhost

<ip_3>:443
匹配的 IP,它只是忽略所有通配符 vhosts (
*:443
)。因此,它的“最佳”匹配是
<ip_3>:443
vhost.

有没有办法让它工作,而不必为所有其他虚拟主机(有很多)定义基于 IP 的配置?

apache2 vhosts
© www.soinside.com 2019 - 2024. All rights reserved.