Proxy Error: Plone ou Apache?

Publicado por Cleber J Santos em 04/07/2009

[ Hits: 8.277 ]

 


Proxy Error: Plone ou Apache?



Esse erro significa que o servidor que você acessou atua como um proxy ou gateway e que o servidor "acima" dele reportou algum erro ao tentar completar a requisição, também conhecido como 502 bad gateway.

É realmente muito chato quando um cliente te liga dias dizendo que o site dele está dando este tipo de problema, é quando você começa a perder os cabelos tentado achar onde ele está. Normalmente não é complicado achar o gargalo, mas neste caso aqui me tirou alguns dias de pesquisas.

Efetuei alguns testes e pesquisas sobre os erros no log do Apache, pois o Zope não estava registrando nenhum erro em seus logs, já o Apache mostrou-se saber bem dos erros:

less logs/error_log | grep 'The timeout

[Sat Mar 14 17:30:46 2009] [error] (70007)The timeout specified has
expired: proxy: prefetch request body failed to 127.0.0.1:8001
(127.0.0.1) from xxx.xxx.xx.xx ()

[Sat Mar 14 17:31:36 2009] [error] (70007)The timeout specified has
expired: proxy: prefetch request body failed to 127.0.0.1:8001
(127.0.0.1) from xxx.xxx.xx.xx (

tail -f logs/error_log

[Wed Mar 25 17:33:54 2009] [error] [client xxx.xxx.xxx.xxx] proxy:
Error reading from remote server returned by
/atividades/portal_factory/atividade/atividade.2009-03-25.7299552564/base_edit,
referer:
http://www.siteinocente.com.br/atividades/portal_factory/atividade/atividade.2009-03-25.7299552564/edit
[Thu
Mar 26 02:30:37 2009] [error] [client xx.xxx.xx.xxx] Invalid URI in
request GET /../banco-de-imagens/Logo%20Iguatemi.jpg/image_preview
HTTP/1.0, referer: http://www.siteinocente.com.br

A questão era agora descobrir onde estava o gargalo, e como trata-se de uma versão do apache meio suspeita (sim, já tive este mesmo problema em outro cliente 'Server version: Apache/2.2.3'), resolvi procurar ler a documentação. Percebi então que isso é um bug dessa versão do Apache, por quê?

Bem, isso poderia ocorrer por um dos 3 motivos:
  • Timeout = Lentidão de resposta na rede local [(70007)The timeout specified has expired];
  • Plone sendo restartado constantemente;
  • Fim do processamento da página encontrado, isso é repassado ao Apache como um cabeçalho falso indicando que a página chegou ao fim.

Normalmente o cabeçalho é disparado ao Zope/Plone e no qual fecharia a conexão corretamente.

No fórum do Apache existe uma discussão no qual este bug é mencionado, ou seja, isso pode ser gerado de através da visitas de robôs, como o Google robots ou ainda por quase todos os buscadores, claro, não apenas por isso, mas nada mais é do que um bug no módulo proxy (mod_proxy).

Agora as coisas passam a ficar um cadinho mais fácil né :-), descoberto nosso gargalo vamos à solução.

Solução

Podemos migrar para a versão 2.2.10 do Apache ou se tiver alguma mais atual, onde o bug esteja corrigido, ou colocar dois parâmetros no arquivo de configuração do virtual host, que são:

<VirtualHost *:80>
   SetEnv force-proxy-request-1.0 1
   SetEnv proxy-nokeepalive 1
</VirtualHost>

Isso força o mod_proxy a enviar os pedidos de utilização HTTP/1.0 sem KeepAlive, burlando assim o problema de proxy error.

Porém, cada caso é um caso, aqui o problema que ocorreu foi por conta deste bug, mas poderia ocorrer por outros milhares de problemas, por isso é sempre bom dar uma lida nos logs de qualquer aplicação, isso ajuda muito, como foi no meu caso.

Até a próxima! ;)

Outras dicas deste autor

Instalando o Plone 4 core-dev

Bpython, uma interface ncurses para Python

Criando seu próprio repositório do Pypi

Resolvendo o problema do flash player 10 no Plone

Leitura recomendada

GTA San Andreas online

Servidor torrent usando Ubuntu Server e Transmission

Clickjacking - uma breve análise sobre o assunto

Scripts úteis

Aprenda a voar sem segredos com o Kernel Linux 2.6.34-omnislash

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts