Mod-proxy com alternativas de string de consulta?

2

Atualmente, estou tentando usar o mod_proxy para fazer solicitações de pesquisa em outro servidor. As solicitações do servidor remoto devem ser estruturadas da seguinte forma:

http://path.to.remote/search.php?key=MYKEY&term=SEARCHTERM

Em um esforço para ofuscar minha chave de acesso, eu esperava conter a autenticação em minhas definições de vhost. Como a chave deve ser passada como um valor de string de consulta, pensei que seria tão simples quanto:

ProxyPass /lookup/t/ http://path.to.remote/search.php?key=MYKEY&term=

Onde meus URLs se parecem com

http://localhost/lookup/t/term=SEARCHTERM

Descobri rapidamente que o ProxyPass pré-forma fugas obrigatórias de caracteres no URL de destino que tornam meu URL inutilizável. Eu encontrei muitas pessoas que tiveram problemas semelhantes, principalmente com caracteres previamente codificados, e que a codificação de URL com ProxyPass era inevitável.

Eu encontrei algumas sugestões que devo usar mod_rewrite para montar o pedido de proxy para mim, mas eu não sabia como fazê-lo. Acabei com as regras na minha definição de vhost que parecem algo como:

RewriteEngine On
RewriteCond     %{REQUEST_URI}      !^/lookup/t/
RewriteRule ^/lookup/t/$ http://path.to.remote/search.php?key=MYKEY&term=$1

Eu não tenho muita experiência com mod_rewrite, e minhas habilidades de regex não são ótimas, então espero que alguém possa explicar como eu iria reescrever minha URL e como canalizar através do mod_proxy conforme necessário. Estou correto em pensar que preciso usar reescrever para montar a string de consulta da seguinte forma:

Http://localhost/lookup/t/term=SEARCHTERM  
Http://localhost/lookup/t/?key=MYKEY&term=SEARCHTERM  

e, em seguida, use o proxy mod para ir de

/lookup/t/   

para

http://path.to.remote/search.php
    
por user1026361 28.11.2012 / 18:17

1 resposta

2

Minhas suspeitas se mostraram corretas. Eu tive que modificar a string de consulta com mod_rewrite e, em seguida, procurá-la para o meu destino. No final:

  1. eu habilitei mod_rewrite e mod_ssl
  2. Eu adicionei uma diretiva SSLProxyEngine à minha definição de vhost:
    SSLProxyEngine On
  3. Liguei a reescrita e adicionei uma regra no meu def do vhost. Eu também liguei o log para depuração. Eu aprendi que não seria capaz de reescrever um pedido para o diretório, então eu tive que apontar para um script. Eu também tive que usar as opções QSA e P:
    RewriteEngine no
    RewriteRule ^ / lookup.php / lookup? Key = MYKEY [QSA, P]

  4. Eu configurei minhas regras de proxy. Como a string de consulta é construída, as regras simples de proxy se aplicam:
    ProxyPass / lookup link
    ProxyPassReverse / lookup link

  5. Não se esqueça de reiniciar o apache! (Eu fiz)

  6. agora me conecto a http://localhost/lookup.php?term=SEACRHTERM
por 29.11.2012 / 16:45