apache mod-rewrite mod-proxy

apache - ¿Necesito usar ProxyPassReverse si estoy usando la reescritura de mod?



mod-rewrite mod-proxy (1)

El ProxyPassReverse se usa para cambiar los encabezados enviados por la aplicación (appcluster) a Apache, antes de que Apache le envíe el navegador. Por ejemplo, si la aplicación se encuentra en http://localhost:9013/ e intenta redirigir el navegador a, por ejemplo, /new_location/ , entonces responderá con un encabezado de redireccionamiento y ubicación de http://localhost:9013/new_location/ , y Apache lo tomará y lo enviará al navegador. El problema es que el navegador (asumiendo que está en otro lugar) intenta enviar una solicitud a http://localhost:9013/new_location/ , y obtiene un error.

Lo que ProxyPassReverse hace es interceptar esos encabezados, y los vuelve a escribir para que coincidan con la apariencia del servidor Apache que está haciendo el proxy. Entonces, si mi servidor apache aloja http://myhost.com/ y tengo un ProxyPass que apunta a http://localhost:9013/App , si la aplicación que se encuentra en localhost: 9013 devuelve una redirección a http://localhost:9013/App/new_location/ , necesitaré usar ProxyPassReverse para que Apache vuelva a escribirlo en http://myhost.com/new_location/ antes de enviar la solicitud de vuelta al navegador.

Si no está emitiendo redirecciones, no será un problema, pero no está de más tenerlo allí en caso de que se devuelva una redirección 301/302. En cuanto a mod_rewrite, RewriteRule se aplica a la solicitud que va a la aplicación, y no a la respuesta que proviene de la aplicación. Así que son eventos mutuamente exclusivos.

Estoy usando mod rewrite para enmascarar la raíz de contexto de mi aplicación. Por ejemplo,

RewriteRule ^/directory/(.*) balancer://appcluster/directory/$1 [P]

El appcluster se ve así:

<Proxy balancer://appcluster> BalancerMember http://localhost:8080/App route=app_01 keepalive=On loadfactor=1 ttl=300 min=3 smax=5 max=15 ProxySet lbmethod=byrequests stickysession=JSESSIONID|jsessionid timeout=120 nofailover=On </Proxy>

¿Necesito usar ProxyPassReverse ? Solía ​​usarlo porque mi antiguo código de servidor web tenía este aspecto:

ProxyPass /App balancer://appcluster lbmethod=byrequests stickysession=JSESSIONID|jsessionid timeout=120 nofailover=On ProxyPassReverse /App http://localhost:9013/App