Eu tenho uma configuração de proxy reverso da seguinte maneira no Apache:
O servidor A com o endereço www.example.com/folder é o servidor proxy reverso.
Ele mapeia para: Servidor B com endereço test.madeupurl.com
Este tipo de obras. Mas o problema que tenho é que, em www.example.com/folder, todos os links relativos são dos formatos www.example.com/css/examplefilename.css, em vez de www.example.com/folder/css/examplefilename. css
Como faço para corrigir isso?
Até agora, meu proxy reverso possui isso no servidor A (www.example.com):
<Location /folder>
ProxyPass http://test.madeupurl.com
ProxyPassReverse http://test.madeupurl.com
</Location>
linux
apache-2.2
reverse-proxy
Trabalhador
fonte
fonte
Respostas:
O Apache ProxyPassRewrite não reescreve os corpos de resposta recebidos de http://test.example.com , apenas cabeçalhos (como redirecionamentos para uma página 404 e outras).
Várias alternativas:
Um ) Reescreva o aplicativo interno para usar caminhos relativos em vez de absolutos. ou seja, em
../css/style.css
vez de/css/style.css
Dois ) Reimplemente o aplicativo interno no mesmo subdiretório,
/folder
e não na raiz de test.example.com.Três ) É improvável que um e dois aconteçam ... Se você tiver sorte, o aplicativo interno usa apenas dois ou três subdiretórios e esses não são utilizados no site principal , basta escrever várias linhas de ProxyPass:
Quatro ) Crie um subdomínio separado para o aplicativo interno e simplesmente inverta o proxy:
Cinco ) Às vezes, os desenvolvedores
são completamente à nora etêm as suas aplicações não só gerar absoluta URL de mas mesmo incluir a parte hostname em sua URL do e as resultantes olhares de código HTML como este:<img src=http://test.example.com/icons/logo.png>
.A ) Você pode usar a solução combinada de um DNS com horizonte dividido e o cenário 4. Os usuários internos e externos usam o test.example.com, mas o DNS interno aponta diretamente para o endereço IP do servidor test.example.com. Para usuários externos, o registro público de test.example.com aponta para o endereço IP do seu servidor público em www.example.com e você pode usar a solução 4.
B ) Na verdade, você pode obter do apache não apenas solicitações de proxy para test.example.com, mas também reescrever o corpo da resposta antes que ele seja transmitido aos seus usuários. (Normalmente, um proxy apenas reescreve os cabeçalhos / respostas HTTP). mod_substitute no apache 2.2. Não testei se ele se comporta bem com mod_proxy, mas talvez o seguinte funcione:
fonte
<img src=/folder/icons/button.png>
que por a vez será capturada pelaProxyPass /folder/ http://test.madeupurl.com/folder/
diretiva.href="../css/custom.css"
e nãohref="/css/custom.css"
. Quando o usuário da Internet recuperar a página, o URL será www.example.com/folder/content/index.html. A URL para o css será então:www.example.com/folder/content/../css/custom.css
qual é realmente awww.example.com/folder/css/custom.css
qual será encaminhadatest.madeupurl.com/css/custom.css
.Como complemento da resposta do HBruijn , se você optar pela solução (3) "ProxyPass", poderá ser necessário também usar o mod_proxy_html para reescrever alguns URLs nas suas páginas HTML.
cf. Como lidar com URLs relativos corretamente com um proxy reverso para alguns exemplos.
Como um exemplo aplicado, veja como você pode configurar o Apache usando a
ProxyHTMLURLMap
regra para encaminhar tudo em your-domain-name.com/pad para sua instância Etherpad em execução localmente na porta 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]
fonte
SetOutputFilter
&ProxyHTMLURLMap
.Você pode usar a seguinte maneira de criar um proxy reverso:
1. Instale mod_proxy_html
Carregar o módulo mod_proxy_html
E use a seguinte configuração
Espero que esta ajuda.
fonte