我正在使用 Apache 2.4.58 和 Windows Server 2019 Essentials。 我只有 1 台服务器和 1 个公共 IP 地址以及 2 个网卡:192.168.3.100 和 192.168.3.200。 我在 httpd-ssl.conf 中创建了 2 个代理指令
<VirtualHost _default_:443>
<Proxy "http://192.168.3.100:20300/">
Require expr "(%{HTTP_HOST} == 'domain1.com') || (%{HTTP_HOST} == 'www.domain1.com')"
ProxyPreserveHost On
RequestHeader set X-ProxyBase "/"
</Proxy>
ProxyPass "/" "http://192.168.3.100:20300/"
ProxyPassReverse "/" "192.168.3.100:20300/"
<Proxy "http://192.168.3.200:20600/">
Require expr "(%{HTTP_HOST} == 'domain2.com') || (%{HTTP_HOST} == 'www.domain2.com')"
ProxyPreserveHost On
RequestHeader set X-ProxyBase "/"
</Proxy>
ProxyPass "/" "http://192.168.3.200:20600/"
ProxyPassReverse "/" "192.168.3.200:20600/"
</VirtualHost>
问题是只有代理http://192.168.3.100:20300/被执行,我只能访问domain1.com! 如果我尝试访问domain2.com,我会收到以下错误消息:
“禁止” 您无权访问此资源。”
如果我颠倒两个代理的顺序,也没关系。 仅当我评论domain1.com代理时才能访问Domain2.com。
可能是什么问题?
<VirtualHost _default_:443>
<Proxy "http://192.168.3.100:20300/">
Require expr "(%{HTTP_HOST} == 'domain1.com') || (%{HTTP_HOST} == 'www.domain1.com')"
ProxyPreserveHost On
RequestHeader set X-ProxyBase "/"
ProxyPass "/" "http://192.168.3.100:20300/"
ProxyPassReverse "/" "192.168.3.100:20300/"
</Proxy>
<Proxy "http://192.168.3.200:20600/">
Require expr "(%{HTTP_HOST} == 'domain2.com') || (%{HTTP_HOST} == 'www.domain2.com')"
ProxyPreserveHost On
RequestHeader set X-ProxyBase "/"
ProxyPass "/" "http://192.168.3.200:20600/"
ProxyPassReverse "/" "192.168.3.200:20600/"
</Proxy>
</VirtualHost>
将 ProxyPass 和 ProxyPassReverse 指令包含在
<Proxy
块中。否则,apache 将始终匹配第一个 ProxyPass "/" "http://192.168.3.100:20300/"
,而永远不会看到你的第二个 ProxyPass。