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! ;)
Nenhum comentário foi encontrado.