Configuración del proxy Apache (URL de recursos de aplicaciones web truncada)

Configuración del proxy Apache (URL de recursos de aplicaciones web truncada)

Estoy intentando configurar un proxy en un servidor web Apache, pero tengo un problema con la compilación de la URL porque en la URL resultante falta parte de la ruta. Un ejemplo:

http://server/webapp/style.css(esperado)

http://server/style.css(resultado real)

Tengo un servidor expuesto en la web (al que llamaré frontendserver) y otro servidor (backendserver) en una red interna (no accesible desde la web) donde está la aplicación web que quiero proxy afuera. Probé algunos métodos y el problema principal es que en el proxy la URL no está (re)escrita de la manera correcta, el servidor o el navegador pierden una parte.

Lo que probé:

ProxyPass /webapp http://backendserver
ProxyPassReverse /webapp http://backendserver

La URL de la aplicación en el navegador es correcta http://frontendserver/webapp; elíndice.htmlestá visible pero faltan todos los recursos anexos (js, sockets, css, etc.) porque sus URL están http://frontendserver/style.cssen lugar de http://frontendserver/webapp/style.css.


¿Es este el método correcto para configurar correctamente este tipo de proxy?

Probé alguna otra solución también con el módulo de reescritura de Apache pero no llego a un buen resultado, tal vez alguien tenga una buena sugerencia para resolver el problema.

Gracias

Respuesta1

ProxyPasscambia la forma en que se responden las URL, pero no reescribe las URL en su index.html. Para solucionar ese problema, sus opciones son:

  1. Vuelva a escribir index.html para usar enlaces relativos ( css/style.css) en lugar de absolutos ( /css/style.css), de modo que sigan funcionando desde una base de URL diferente.

  2. Usarmod_proxy_htmlpara reescribir los enlaces en su contenido HTML, Javascript y CSS saliente. Algo como:

    <Files *.html>
      ProxyHTMLEnable On
      ProxyHTMLLinks  a  href
      ...
      ProxyHTMLURLMap http://frontendserver/ http://frontendserver/webapp/
    </Files>
    

La primera solución es mejor si puedes hacerlo fácilmente, ya que hace que tu contenido sea portátil y más confiable.

La segunda solución puede funcionar para usted, si todas las URL de su contenido son estáticas. Pero mod_proxy_html no sabe nada acerca de las URL calculadas dinámicamente, por ejemplo, si calcula las URL en Javascript. Entonces, en ese caso, fallará a menos que también revise su código para usar una base de URL dinámica.

información relacionada