ProxyPreserveHost en reglas de paso de proxy individuales

8

Tengo dos reglas de proxypass en mi servidor web, una que apunta a una instancia de barniz local para fines de almacenamiento en caché, para la que quiero que ProxyPreserveHost esté habilitado, y otra que apunta a un sitio alojado de terceros, para el que quiero que ProxyPreserveHost esté deshabilitado. ¿Hay alguna forma de que pueda hacer esto por regla / pase?

580farm
fuente

Respuestas:

13

Bajo Apache 2.2, no: la ProxyPreserveHostdirectiva solo es válida en la configuración del servidor o en contextos de host virtual ; necesitaría que las diferentes ProxyPassdeclaraciones estén en diferentes hosts virtuales.

En Apache 2.4, sí: el contexto del directorio se ha agregado para la directiva , por lo que ahora puede hacer 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
fuente
3

Puedes con la ayuda 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>
Sorin
fuente
0

No puedo votar la respuesta de Sorin ...

En nuestra situación local que ejecuta Apache 2.2, y la aplicación principal requiere proxypreservehost (autor CQ / AEM) para iniciar sesión, pero un socio al que delegamos requiere su host en el encabezado del host.

Sin embargo, no necesitamos hacer esto con regex, un regular <Location...>funciona bien.

De la documentación ( http://httpd.apache.org/docs/2.2/mod/core.html#location ):

La directiva limita el alcance de las directivas adjuntas por URL.

Esta solución funciona para nosotros:

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

Esto establece el encabezado de host para esta solicitud al nombre de host del socio.

Con eso en su lugar, podemos continuar ingresando al autor CQ / AEM Y al proxy para el servicio asociado utilizando su encabezado de host esperado.

Chris
fuente