Estou tentando configurar um proxy em um servidor web Apache, mas tenho um problema sobre a construção do URL porque falta parte do caminho no URL resultante. Um exemplo:
http://server/webapp/style.css
(esperado)
http://server/style.css
(resultado real)
Tenho um servidor exposto na web (que chamarei de frontendserver) e outro servidor (backendserver) em uma rede interna (não acessível pela web) onde está a aplicação web que desejo fazer proxy externamente. Tentei alguns métodos e o principal problema é que no proxy a URL não é (re)escrita da maneira correta, falta uma parte no servidor ou navegador.
O que eu tentei:
ProxyPass /webapp http://backendserver
ProxyPassReverse /webapp http://backendserver
A URL do aplicativo no navegador está correta http://frontendserver/webapp
; oindex.htmlestá visível, mas todos os recursos anexados (js, soquetes, css, etc.) estão faltando porque seus URLs são http://frontendserver/style.css
em vez de http://frontendserver/webapp/style.css
.
Este é o método correto para configurar esse tipo de proxy corretamente?
Já tentei alguma outra solução também com o módulo de reescrita do Apache mas não obtive um bom resultado, talvez alguém tenha uma boa sugestão para resolver o problema.
Obrigado
Responder1
ProxyPass
altera a forma como os URLs são respondidos, mas não os reescreve no seu index.html. Para corrigir esse problema, suas opções são:
Reescreva index.html para usar links relativos (
css/style.css
) em vez de absolutos (/css/style.css
), para que eles ainda funcionem a partir de uma base de URL diferente.Usarmod_proxy_htmlpara reescrever os links em seu conteúdo HTML, Javascript e CSS de saída. Algo como:
<Files *.html> ProxyHTMLEnable On ProxyHTMLLinks a href ... ProxyHTMLURLMap http://frontendserver/ http://frontendserver/webapp/ </Files>
A primeira solução é melhor se você puder fazê-la facilmente, pois torna seu conteúdo portátil e mais confiável.
A segunda solução pode funcionar para você, se todos os URLs do seu conteúdo forem estáticos. Mas mod_proxy_html não sabe nada sobre URLs calculados dinamicamente - por exemplo, se você calcular URLs em Javascript. Nesse caso, ele falhará, a menos que você também revise seu código para usar uma base de URL dinâmica.