Eu tenho uma configuração de proxy reverso da seguinte forma no Apache:
O servidor A com endereço www.example.com/folder é o servidor proxy reverso.
Ele mapeia para: Servidor B com endereço test.madeupurl.com
Esse tipo de trabalho. Mas o problema que tenho é que, em www.example.com/folder, todos os links relativos são do formato 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 tem isso no Servidor A (www.example.com):
<Location /folder>
ProxyPass http://test.madeupurl.com
ProxyPassReverse http://test.madeupurl.com
</Location>
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 tal).
Várias alternativas:
Um ) Reescreva o aplicativo interno para usar caminhos relativos em vez de absolutos. ou seja
../css/style.css
, em vez de/css/style.css
Dois ) Reimplemente o aplicativo interno no mesmo subdiretório
/folder
em vez de na raiz de test.example.com.Três ) Um e dois são improváveis de acontecer... Se você tiver sorte, o aplicativo interno usa apenas dois ou três subdiretórios e esses não são usados em seu site principal , basta escrever um monte de linhas ProxyPass:
Quatro ) Crie um subdomínio separado para o aplicativo interno e simplesmente faça o proxy reverso de tudo:
Cinco ) Às vezes os desenvolvedores
são completamente ignorantes eseus aplicativos não apenas geram URLs absolutos, mas também incluem a parte do nome do host em seus URLs e o código HTML resultante se parece com isso:<img src=http://test.example.com/icons/logo.png>
.A ) Você pode usar a solução combinada de um DNS split horizon e o cenário 4. Usuários internos e externos usam test.example.com, mas seu 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 web público www.example.com e você pode usar a solução 4.
B ) Você pode realmente obter o apache não apenas para solicitações de proxy para test.example.com, mas também reescrever o corpo da resposta antes que ela seja transmitida aos seus usuários. (Normalmente, um proxy apenas reescreve cabeçalhos/respostas HTTP). mod_substitute no apache 2.2. Eu não testei se ele se encaixa bem com mod_proxy, mas talvez o seguinte funcione:
Como complemento à resposta de HBruijn , se você optar pela solução (3) "ProxyPass", talvez seja necessário usar também mod_proxy_html para reescrever alguns URLs em suas páginas HTML.
cf. Como lidar com URLs relativos corretamente com um proxy reverso para alguns exemplos.
Como 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:Você pode usar a seguinte maneira de fazer um proxy reverso:
1. Instale mod_proxy_html
Carregar módulo mod_proxy_html
E use a seguinte configuração
Espero que esta ajuda.