ProxyPreserveHost上的各个proxypass规则


8

我的Web主机上有两个proxypass规则,一个指向用于缓存目的的本地清漆实例,我希望启用ProxyPreserveHost,另一个指向第三方托管的站点,而我希望禁用ProxyPreserveHost。无论如何,我可以按规则/通过方式执行此操作吗?

Answers:


13

在Apache 2.2下,ProxyPreserveHostno-指令仅在服务器配置或虚拟主机上下文中有效;您需要将不同的ProxyPass语句放在不同的虚拟主机中。

在Apache 2.4中,是- 已为指令添加目录上下文,因此您现在可以执行以下操作:

<Location /to-varnish/>
    ProxyPreserveHost On
    ProxyPass http://127.0.0.1:8000/to-varnish/
</Location>
<Location /to-third-party/>
    ProxyPreserveHost Off
    ProxyPass http://third-party-site.com/
</Location>

3

您可以在RequestHeader的帮助下

ProxyPreserveHost On
<LocationMatch third-party-pattern>
   RequestHeader  set  Host  third-party-vhost-name
   ProxyPassMatch  http://third-party-server
</LocationMatch>
<LocationMatch varnish-pattern>
   ProxyPassMatch  http://varnish-server
</LocationMatch>

0

我无法接受索林的回应...

在运行Apache 2.2的本地情况下,主应用程序需要proxypreservehost(CQ / AEM作者)登录,但是我们代理的合作伙伴在主机头中需要其主机。

尽管我们不需要使用正则表达式来执行此操作,但是常规<Location...>工作正常。

从文档(http://httpd.apache.org/docs/2.2/mod/core.html#location):

该指令通过URL限制了随附指令的范围。

此解决方案适用于我们:

  <Location /[path]/ >
    RequestHeader set Host [thirdparty]
  </Location>
  RewriteRule ^/[path]/(.*) https://[thirdparty]/$1 [P,NC,L]

这会将此请求的主机标头设置为伙伴的主机名。

有了这个,我们可以继续登录到CQ / AEM作者,并使用他们期望的主机头来代理合作伙伴服务。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.