Links de ativos de reescrita de proxy reverso de host virtual Apache2

Links de ativos de reescrita de proxy reverso de host virtual Apache2

Tenho uma aplicação web em execução na porta 8080 do meu servidor: myip:8080/app

Eu tenho a seguinte configuração no meu httpd.conf

<VirtualHost *:80>
 ServerName subdomain.mydomain.com
 ServerAlias mydomain.com
 ProxyPass /app http://localhost:8080/app/
 ProxyPassReverse /app http://localhost:8080/app/
</VirtualHost>

Isso funciona bem e disponibiliza o aplicativo em subdomain.mydomain.com/app

Agora estou lutando para disponibilizá-lo em subdomain.mydomain.com (sem o/app). Eu tentei primeiro

<VirtualHost *:80>
 ServerName subdomain.mydomain.com
 ServerAlias mydomain.com
 ProxyPass / http://localhost:8080/app/
 ProxyPassReverse / http://localhost:8080/app/
</VirtualHost>

e também adicionou

ProxyHTMLURLMap /app/ /

mas ambos não parecem funcionar. A página principal é carregada, mas todos os links javascript e CSS ainda apontam para /app/... que retorna a página html principal em vez do ativo.

o que estou perdendo? Estou no caminho certo ou existe uma maneira completamente diferente (melhor) de conseguir isso?

O aplicativo é um aplicativo da web Tapestry no Tomcat 7 no Ubuntu 12.04.

Qualquer visão sobre o desempenho também seria interessante.

Responder1

ProxyPassReversefunciona apenas em cabeçalhos HTTP (por exemplo: redirecionamentos 301).

Para ativar a reescrita de HTML, você precisa habilitá-la por meio de:

ProxyHTMLEnable On
ProxyHTMLURLMap /app/ /

No entanto, os aplicativos da Web modernos podem entender facilmente o que está acontecendo com a solicitação HTTP feita por proxies reversos, e nenhum ajuste adicional no nível do proxy geralmente é necessário nesse caso.

Lembre-se de que isso mod_proxy_htmladiciona alguma sobrecarga no processamento dessas solicitações.

Responder2

A resposta de Giovanni me colocou no caminho certo. eu precisava adicionar

ProxyHTMLEnable On

ou mais precisamente (para minha versão do mod_proxy_html) o equivalente

SetOutputFilter INFLATE;proxy-html;DEFLATE

No entanto, decidi usá-lo em combinação com uma reescrita (já que não consegui fazer com que os links do evento Tapestry funcionassem de outra maneira):

<VirtualHost *:80>
 ServerName subdomain.mydomain.com
 ServerAlias mydomain.com
 ProxyRequests Off
 ProxyPreserveHost On
 SetOutputFilter INFLATE;proxy-html;DEFLATE     
 ProxyPass / http://localhost:8080/app/
 ProxyPassReverse / http://localhost:8080/app/
 ProxyHTMLURLMap /app/ /     
 ProxyPassReverseCookiePath /app /
 RewriteEngine on
 RewriteRule ^/app/(.+) /$1 [R,L]
</VirtualHost>

Também precisei adaptar o caminho do cookie ( ProxyPassReverseCookiePath /app /) para que meu cookie de sessão do Tomcat funcionasse.

Responder3

Seu aplicativo da web myip:8080/appprovavelmente tem muitos caminhos absolutos em HTML e JS, começando com /app/...os quais não podem ser capturados e reescritos por mod_proxy_html.

Sugiro que você primeiro tente executar seu aplicativo em URLs locais diferentes, como myip:8080/blah. Abra a barra de ferramentas do desenvolvedor do seu navegador e verifique a guia de rede em busca de arquivos que ainda estão sendo solicitados /app/...e corrija-os até que funcionem em ambos os URLs (/blah e /app).

O objetivo deve ser que todos os links do seu aplicativo sejam relativos, ou seja, especificados como

<script type="text/javascript" src="file.js"></script>

em vez de algo assim

<script type="text/javascript" src="/app/file.js"></script>

Confira também o<base>tag para obter uma maneira de substituir o URL base padrão.

informação relacionada