ProxyPreserveHost em regras de proxypass individuais

8

Eu tenho duas regras de proxypass no meu host, uma que aponta para uma instância de verniz local para fins de cache, para a qual desejo o ProxyPreserveHost habilitado e outra que aponta para um site hospedado de terceiros, para o qual o ProxyPreserveHost está desabilitado. Existe alguma maneira de fazer isso por regra / aprovação?

580farm
fonte

Respostas:

13

No Apache 2.2, no - a ProxyPreserveHostdiretiva é válida apenas nos contextos de configuração do servidor ou host virtual ; você precisaria que as diferentes ProxyPassinstruções estivessem em diferentes hosts virtuais.

No Apache 2.4, sim - o contexto do diretório foi adicionado à diretiva , então agora você pode fazer algo como:

<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>
Shane Madden
fonte
3

Você pode, com a ajuda do 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>
Sorin
fonte
0

Não consigo aprovar a resposta de Sorin ...

Em nossa situação local, executando o Apache 2.2, e o aplicativo principal requer o proxypreservehost (autor do CQ / AEM) para fazer login, mas um parceiro para o qual o proxy requer o host no cabeçalho do host.

No entanto, não precisamos fazer isso com regex, pois <Location...>funciona regularmente .

Na documentação ( http://httpd.apache.org/docs/2.2/mod/core.html#location ):

A diretiva limita o escopo das diretivas incluídas por URL.

Esta solução funciona para nós:

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

Isso define o cabeçalho do host para esta solicitação como o nome do host do parceiro.

Com isso, podemos continuar a fazer login no autor CQ / AEM E proxy no serviço do parceiro usando o cabeçalho de host esperado.

Chris
fonte