apache 2 proxypassreverse agrega el puerto virtualhost

1

He estado intentando configurar un proxy inverso usando apache 2 mod_proxy y las directivas proxypass y proxypassreverse.

Estoy instalando WSO2 Identity Server y deseo acceder a esa aplicación usando una URL como la siguiente.

hxxp://myserver.domain.com/wso2/

El myserver.domain.comes accesible en Internet.

Internamente en mi red, he configurado un virtualhost que se ejecuta en mi configuración de apache2 con los siguientes parámetros:

Por varias razones, el puerto 80 no está disponible y el host virtual debe permanecer como: 8080.

Finalmente, aquí está mi configuración de host virtual

<VirtualHost *:8080>

  <Location /wso2/>
    ProxyPass hxxps://internal.wso2.node:9443/
    ProxyPassReverse hxxs://internal.wso2.node:9443/
  </Location>

 ProxyVia On
 ProxyPreserveHost Off
 ProxyAddHeaders Off
 ProxyRequests Off
 SSLProxyEngine On
 SSLProxyCheckPeerCN Off

 </VirtualHost>

La cuestión:

Puedo usar mi navegador web (Firefox / Chrome) para solicitar el recurso http://myserver.domain.com/wso2/ . En mis archivos de registro, veo que la solicitud llega al servidor apache y el host virtual detecta la ubicación / wso2 /.

Pasa a través del proxy y aterriza en el servidor internal.wso2.node. sin embargo, el producto WSO2 IS realiza varios redireccionamientos que, en los archivos de registro, lo veo solicitando el recurso con el puerto adjunto.

Aquí está el flujo de solicitud

  hxxp://myserver.domain.com/wso2/  -> hxxps://internal.wso2.node:9443/
  REDIRECT x3
  hxxps://internal.wso2.node:8080/carbon -> 
  hxxps://internal.wso2.node:8080/carbon/admin/login.jsp

  Back to my web browser
  hxxp://myserver.domain.com:8080/wso2/carbon/admin/login.jsp

Por alguna razón, la respuesta de Apache agrega su host virtual a la URL que estoy solicitando.

Si elimino el puerto: 8080 y solicito nuevamente la URL completa, accederá al recurso bien. Sin embargo, cualquier intento de acceder usando solo http://myserver.domain.com/wso2/ resultará en redirecciones y el puerto adjunto.

2
  • ¿Qué encabezado Host: se usa aquí? ¿Se ha anulado la directiva UseCanonicalPhysicalPort? ¿Cómo ocurre el salto del puerto 80 en el cliente al puerto 8080 en Apache? NAT? Proxy HTTP? Por lo general, la URL autorreferencial siempre será correcta a menos que el encabezado del host sea incorrecto o se haya anulado UseCanonicalPhysicalPort. covener 29/04/2015 a las 12:59
  • Las directivas UseCanonicalName Off UseCanonicalPhysicalPort Off no se establecieron todas, las sobrescribí en off y agregué un ServerName y ahora funciona como se esperaba publicará la configuración actualizadaSevSoft 29/04/15 a las 14:36
0

Según la sugerencia del pagador, el culpable en este caso resultó ser las siguientes directivas:

UseCanonicalName Off
UseCanonicalPhysicalPort Off

Además, la aplicación web a la que intento acceder hace uso de sesiones y cookies, por lo tanto, también debemos usarlas como proxy, consulte las directivas agregadas en ProxyPass y ProxyPassReverse.

Por lo tanto, el archivo de configuración de virtualhost actualizado ahora debería verse así

<VirtualHost *:8080>

   ServerName: myServer.domain.com
   UseCanonicalName Off
   UseCanonicalPhysicalPort Off

  <Location /wso2/>
    ProxyPass hxxps://internal.wso2.node:9443/
    ProxyPassReverse hxxs://internal.wso2.node:9443/
    ProxyPassReverseCookiePath / /wso2/
    ProxyPassReverseCookieDomain internal.wso2.node myserver.domain.com
  </Location>

ProxyVia On
ProxyPreserveHost Off
ProxyAddHeaders Off
ProxyRequests Off
SSLProxyEngine On
SSLProxyCheckPeerCN Off

</VirtualHost>