Tengo una configuración de proxy inverso de la siguiente manera en Apache:
El servidor A con 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 trabajos. Pero el problema que tengo es, en www.example.com/folder, todos los enlaces relativos son de los formularios www.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>
linux
apache-2.2
reverse-proxy
Gran trabajador
fuente
fuente
Respuestas:
Apache ProxyPassRewrite no reescribe los cuerpos de respuesta recibidos de http://test.example.com , solo encabezados (como redireccionamientos a una página 404 y tal).
Una serie de alternativas:
Uno ) Reescribe la aplicación interna para usar rutas relativas en lugar de absolutas. es decir, en
../css/style.css
lugar de/css/style.css
Dos )
/folder
Vuelva a implementar la aplicación interna en el mismo subdirectorio en lugar de en la raíz de test.example.com.Tres ) 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:
Cuatro ) Cree un subdominio separado para la aplicación interna y simplemente invierta todo el proxy:
Cinco ) A veces los desarrolladores
son totalmente desorientado ytener sus aplicaciones no sólo generan absoluta URL pero incluso incluyen la parte de host en su URL y las miradas resultantes de código HTML como este:<img src=http://test.example.com/icons/logo.png>
.A ) Puede usar la solución combinada de un DNS de horizonte dividido y el escenario 4. Los usuarios internos y externos usan test.example.com, pero su DNS interno apunta directamente a la dirección IP del servidor test.example.com. Para 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 obtener apache no solo para las solicitudes de proxy para test.example.com, sino también para reescribir el cuerpo de la respuesta antes de que se transmita a sus usuarios. (Normalmente, un proxy solo reescribe 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:
fuente
<img src=/folder/icons/button.png>
en el turno será atrapado por laProxyPass /folder/ http://test.madeupurl.com/folder/
directiva.href="../css/custom.css"
y nohref="/css/custom.css"
. Cuando el usuario de Internet recupere la página, la URL será www.example.com/folder/content/index.html. La URL para el CSS entonces será:www.example.com/folder/content/../css/custom.css
que en realidad es a lawww.example.com/folder/css/custom.css
que se reenviarátest.madeupurl.com/css/custom.css
.Como complemento a la respuesta de HBruijn , si opta por la solución (3) "ProxyPass", es posible que también deba usar mod_proxy_html para reescribir algunas URL en sus páginas HTML.
cf. Cómo manejar correctamente las URL relativas con un proxy inverso para algunos ejemplos.
Como ejemplo aplicado, así es cómo puede configurar Apache usando la
ProxyHTMLURLMap
regla para reenviar todo en your-domain-name.com/pad a su instancia de Etherpad que se ejecuta localmente en el puerto 9001:<Location /pad> ProxyPass http://localhost:9001 retry=0 # retry=0 => avoid 503's when restarting etherpad-lite ProxyPassReverse http://localhost:9001 SetOutputFilter proxy-html ProxyHTMLURLMap http://localhost:9001 </Location> RewriteRule ^/pad$ /pad/ [R]
fuente
SetOutputFilter
&ProxyHTMLURLMap
.Puede usar la siguiente forma para crear un proxy inverso:
1. Instale mod_proxy_html
Cargue el módulo mod_proxy_html
Y use la siguiente configuración
Espero que esto ayude.
fuente