mod_headers podem conseguir lidar com isso.
Header set Location http://mywebapp.com/proxy?%{url}e expr="resp('Location') =~ /.*/"
A parte expr
requer o apache 2.4.
Nota: eu não testei isso.
Referências:
Problema:
Eu estou tentando configurar o apache como um proxy reverso onde o servidor de remoção é especificado em um parâmetro de seqüência de caracteres de consulta.
Digamos que eu esteja atendendo um site em mywebapp.com. Se você navegou para link , o apache deve funcionar como um proxy reverso para link . Da mesma forma, se você navegasse para o link , o apache deveria agir como um proxy reverso para < um link de href="https://login.notmysite.com"> .
Considerações:
1. Reescreva os URLs relativos no html de resposta para passar pelo proxy.
2. Reescreva as respostas de redirecionamento do servidor remoto. Por exemplo, se o usuário solicitar o mywebapp.com/proxy?url= link e o servidor remoto responder com um redirecionamento para link , o navegador do usuário deve ver um redirecionamento para mywebapp.com/proxy?url= link .
3. Suporte http e https
4. Suporte para cookies
5. segurança razoável. Eu não quero abrir um proxy para qualquer pessoa no mundo usar - ele só deve ser usado em um iframe no site hospedado em mywebapp.com.
Ambiente:
Estou usando o apache 2.2.24, mas posso atualizar se isso facilitar o problema.
Configuração atual:
<VirtualHost 127.0.0.1:8081>
ServerName www.mywebapp.com
SSLProxyEngine On
RewriteEngine on
RewriteCond %{QUERY_STRING} ^url=(.*)$
RewriteRule ^/proxy - [E=url:%1]
RewriteCond %{QUERY_STRING} ^url=(https?://[^:/]+)/?
RewriteRule ^/proxy - [E=url_host:%1]
RewriteCond %{QUERY_STRING} ^url=(.*)$
RewriteRule ^/proxy %1 [P]
ProxyPassInterpolateEnv On
ProxyPassReverse /proxy/ ${url_host} interpolate
<Location /proxy>
ProxyHTMLEnable On
ProxyHTMLInterp On
ProxyHTMLURLMap / ${url_host}/ V
RequestHeader unset Accept-Encoding
</Location>
</VirtualHost>
Esta configuração parece estar funcionando corretamente para a consideração # 1, mas eu acertei um obstáculo com a consideração # 2. Eu sei que você geralmente lida com redirecionamentos com o comando ProxyPassReverse, mas não tenho certeza como fazer isso para reescrever o parâmetro da string de consulta.
Perguntas:
Dadas as considerações, o Apache é uma ferramenta apropriada para resolver este problema?
Em caso afirmativo, como configuro a configuração do apache para atender a todas as considerações acima?
Sei que essa é uma grande pergunta: se você puder contribuir com uma resposta que me ajude a atender apenas uma das considerações, atualizarei a configuração acima para a comunidade ver.
Talvez resolvê-lo com Libra seja mais fácil e seguro. Mas então não é um redirecionamento, mas um proxy reverso.
Além disso, um pequeno script php poderia fazer o trabalho também ...
O maior problema com sua idéia é que, se você espera que o proxy reverso envie cookies para o backend, mas o cliente não envia os cookies para o frontend (a menos que o domínio do cookie de backend seja inferior ao frontend).
Eu sugeriria que o mod_proxy provavelmente seria muito difícil de usar, e nesse caso você chegaria ao seu objetivo mais rápido com o mod_rewrite.
... mas acho que você provavelmente está tentando resolver um problema com um projeto com falhas prováveis. Talvez se você puder esclarecer melhor sobre o problema que está tentando resolver com essa solução, poderemos sugerir algo um pouco mais limpo.