ProxyPreserveHost für einzelne Proxypass-Regeln

8

Ich habe zwei Proxypass-Regeln auf meinem Webhost, eine, die auf eine lokale Lackinstanz für Caching-Zwecke verweist, für die ProxyPreserveHost aktiviert werden soll, und eine andere, die auf eine von einem Drittanbieter gehostete Site verweist, für die ProxyPreserveHost deaktiviert werden soll. Gibt es überhaupt eine Möglichkeit, dies pro Regel / Durchgang zu tun?

580farm
quelle

Antworten:

13

Unter Apache 2.2 ist no - die ProxyPreserveHostDirektive nur in der Serverkonfiguration oder im Kontext des virtuellen Hosts gültig . Die verschiedenen ProxyPassAnweisungen müssen sich auf verschiedenen virtuellen Hosts befinden.

In Apache 2.4 ja - der Verzeichniskontext wurde für die Direktive hinzugefügt , sodass Sie jetzt Folgendes tun können:

<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
quelle
3

Sie können mit Hilfe von 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
quelle
0

Ich kann Sorins Antwort nicht unterstützen ...

In unserer lokalen Situation, in der Apache 2.2 ausgeführt wird und für die primäre App ein Proxypreservehost (CQ / AEM-Autor) erforderlich ist, um sich anzumelden, benötigt ein Partner, für den wir einen Proxy erstellen, seinen Host im Host-Header.

Wir müssen dies jedoch nicht mit Regex tun, ein regulärer <Location...>funktioniert gut.

Aus der Dokumentation ( http://httpd.apache.org/docs/2.2/mod/core.html#location ):

Die Direktive begrenzt den Umfang der beigefügten Direktiven nach URL.

Diese Lösung funktioniert bei uns:

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

Dadurch wird der Host-Header für diese Anforderung auf den Hostnamen des Partners festgelegt.

Wenn dies geschehen ist, können wir uns weiterhin beim CQ / AEM-Autor UND Proxy beim Partnerdienst mit dem erwarteten Host-Header anmelden.

Chris
quelle