ProxyPreserveHost个人代理通行证规则

在我的虚拟主机上有两个proxypass规则,一个指向本地varnish实例进行caching,我希望启用ProxyPreserveHost,另一个指向第三方托pipe的站点,我希望禁用ProxyPreserveHost。 无论如何,我可以在每个规则/传球的基础上做到这一点?

在Apache 2.2下,no – ProxyPreserveHost指令仅在服务器configuration或虚拟主机上下文中有效 ; 您需要将不同的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> 

你可以借助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> 

我无法赞成索林的回应

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

我们不需要用正则expression式来做这件事,一个普通的<Location...>工作正常。

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

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

这个解决scheme适用于我们:

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

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

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