O Apache Proxy Pass faz um redirecionamento em vez de agir como um proxy reverso

3

Não tenho certeza se esta é a troca de pilha correta para postar isso. Se houver um lugar melhor, por favor, me redirecione - obrigado.

Eu habilitei estas linhas no httpd.conf:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so

Depois adicionei estas linhas:

ProxyRequests Off

<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>

ProxyPass /goo http://google.ca
ProxyPassReverse /goo http://google.ca

Se eu abrir meu navegador e acessar esta URL:

http://localhost/goo

Eu recebo redirecionado para:

http://www.google.ca

Eu esperava que o mod_proxy atuasse como um proxy e não apenas redirecionasse para o google. Eu esperaria que o meu navegador não deve saber que google.ca existe e só deve saber sobre a existência do servidor proxy.

  1. O que está acontecendo aqui?
  2. Não é para isso que o mod_proxy foi projetado?
  3. Há algo mais que eu deveria estar usando em vez disso?
por sixtyfootersdude 30.07.2013 / 23:44

2 respostas

4
  1. What is going on here?

Bem, vamos dar uma olhada em http://google.ca :

$ curl -D /dev/stdout http://google.ca
HTTP/1.1 301 Moved Permanently
Location: http://www.google.ca/
.
.
.
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.ca/">here</A>.
</BODY></HTML>

E o seu redirecionamento. O Google faz isso em google.com , google.ca e provavelmente em outros.

  1. Is this not what mod_proxy was designed for?

Claro. Ele está fazendo exatamente o que você pediu para fazer ... ele está buscando conteúdo de http://google.ca e retornando-o textualmente para seu cliente.

  1. Is there something else that I should be using instead?

Se você realmente quiser agir como um proxy de encaminhamento genérico em um URL específico, provavelmente precisará investigar mod_proxy_html , que pode ser usado para reescrever links no conteúdo buscado de um servidor remoto.

Mas, em geral, é realmente difícil impedir que um site remoto execute esse tipo de redirecionamento (porque, mesmo que você reescreva links no cabeçalho Location , em <A> tags e em outro lugar, pode perder algum JavaScript ou alguma coisa ...)

    
por 31.07.2013 / 00:49
1

mod_proxy irá de fato reescrever os cabeçalhos "Location", "Content-Location" e "URI" nas respostas de redirecionamento HTTP. Como explicado na resposta de Larsks, o 301 google está fazendo causas

ProxyPassReverse /goo http://google.ca

ser ineficaz porque o redirecionamento para www.google.ca não corresponde.

Você pode tentar adicionar

ProxyPassReverse /goo http://www.google.ca

mas não está claro o que você está tentando realizar.

    
por 31.07.2013 / 02:07

Tags