linux – Cómo manejar las URL relativas correctamente con un proxy inverso

Pregunta:

Tengo una configuración de proxy inverso de la siguiente manera en Apache:

El servidor A con la dirección www.example.com/folder es el servidor proxy inverso.

Se asigna a: Servidor B con dirección test.madeupurl.com

Este tipo de obras. Pero el problema que tengo es, en www.example.com/folder/css/example.com/css/examplefilename.css en lugar de www.example.com/folder/css/examplefilename. css

¿Cómo puedo solucionar esto?

Hasta ahora, mi proxy inverso tiene esto en el servidor A (www.example.com):

<Location /folder>
    ProxyPass  http://test.madeupurl.com
    ProxyPassReverse http://test.madeupurl.com
</Location>

Respuesta:

Apache ProxyPassRewrite no reescribe los cuerpos de respuesta recibidos de http://test.example.com , solo encabezados (como redirecciones a una página 404 y demás).

Varias alternativas:

Uno ) Vuelva a escribir la aplicación interna para usar rutas relativas en lugar de absolutas. es decir ../css/style.css lugar de /css/style.css

Dos ) Vuelva a implementar la aplicación interna en el mismo subdirectorio /folder lugar de en la raíz de test.example.com.

Tres ) A menudo es poco probable que sucedan uno y dos … Si tiene suerte, la aplicación interna solo usa dos o tres subdirectorios y esos no se usan en su sitio principal , simplemente escriba un montón de líneas ProxyPass:

# Expose Internal App to the internet.
ProxyPass /externalpath/  http://test.example.com/
ProxyPassReverse /externalpath/  http://test.example.com/
# Internal app uses a bunch of absolute paths. 
ProxyPass /css/  http://test.example.com/css/
ProxyPassReverse /css/  http://test.example.com/css/
ProxyPass /icons/  http://test.example.com/icons/
ProxyPassReverse /icons/  http://test.example.com/icons/

Cuatro ) Cree un subdominio separado para la aplicación interna y simplemente invierta todo el proxy:

<VirtualHost *:80>
   ServerName app.example.com/
   # Expose Internal App to the internet.
   ProxyPass /  http://test.internal.example.com/
   ProxyPassReverse /  http://test.internal.example.com/
</VirtualHost>

Cinco ) A veces, los desarrolladores no tienen ni idea y sus aplicaciones no solo generan URL absolutas, sino que incluso incluyen la parte del nombre de host en sus URL y el código HTML resultante se ve así: <img src=http://test.example.com/icons/logo.png> .

A ) Puede utilizar una solución combinada de un DNS de horizonte dividido y el escenario 4. Tanto los usuarios internos como los externos utilizan test.example.com, pero su DNS interno apunta directamente a la dirección IP del servidor de test.example.com. Para los usuarios externos, el registro público de test.example.com apunta a la dirección IP de su servidor web público www.example.com y luego puede usar la solución 4.

B ) En realidad, puede hacer que apache no solo haga solicitudes de proxy para test.example.com, sino que también reescriba el cuerpo de la respuesta antes de que se transmita a sus usuarios. (Normalmente, un proxy solo reescribe los encabezados / respuestas HTTP). mod_substitute en apache 2.2. No he probado si se apila bien con mod_proxy, pero tal vez lo siguiente funcione:

<Location /folder/>
  ProxyPass http://test.example.com/
  ProxyPassReverse http://test.example.com/ 
  AddOutputFilterByType SUBSTITUTE text/html
  Substitute "s|test.example.com/|www.example.com/folder/|i" 
</Location>

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım