ProxyPreserveHost sur les règles de proxypass individuelles


8

J'ai deux règles de proxypass sur mon hôte Web, l'une qui pointe vers une instance de vernis local à des fins de mise en cache, pour laquelle je veux que ProxyPreserveHost soit activé, et une autre qui pointe vers un site hébergé tiers, pour lequel je veux que ProxyPreserveHost soit désactivé. Existe-t-il de toute façon que je peux le faire sur une base par règle / passe?

Réponses:


13

Sous Apache 2.2, non - la ProxyPreserveHostdirective n'est valide que dans les contextes de configuration du serveur ou d'hôte virtuel ; vous auriez besoin que les différentes ProxyPassinstructions soient dans différents hôtes virtuels.

Dans Apache 2.4, oui - le contexte du répertoire a été ajouté pour la directive , vous pouvez donc maintenant faire quelque chose comme:

<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

Vous pouvez avec l'aide de 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

Je ne peux pas voter contre la réponse de Sorin ...

Dans notre situation locale exécutant Apache 2.2, et l'application principale nécessite proxypreservehost (auteur CQ / AEM) pour se connecter, mais un partenaire auquel nous mandatons requiert leur hôte dans l'en-tête de l'hôte.

Nous n'avons pas besoin de le faire avec regex cependant, un <Location...>fonctionnement régulier fonctionne très bien.

Depuis la documentation ( http://httpd.apache.org/docs/2.2/mod/core.html#location ):

La directive limite la portée des directives jointes par URL.

Cette solution fonctionne pour nous:

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

Cela définit l'en-tête d'hôte de cette demande sur le nom d'hôte du partenaire.

Avec cela en place, nous pouvons continuer à nous connecter à l'auteur CQ / AEM ET au proxy du service partenaire en utilisant leur en-tête d'hôte attendu.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.