Configuração do proxy Apache (URL de recursos do webapp truncado)

Configuração do proxy Apache (URL de recursos do webapp truncado)

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.cssem 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

ProxyPassaltera 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:

  1. 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.

  2. 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.

informação relacionada