Como configurar o apache como um proxy reverso com o servidor remoto especificado em um parâmetro de string de consulta

2

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.

    
por jrullmann 17.04.2013 / 02:01

3 respostas

0

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:

link link

    
por 19.04.2013 / 22:06
0

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

    
por 21.04.2013 / 16:49
0

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.

    
por 27.04.2015 / 12:22