Apache 反向代理:只有一个代理指令正在工作。第二个被忽略

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

我正在使用 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。

可能是什么问题?

apache proxy reverse-proxy proxypass
1个回答
0
投票
<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。

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