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>