Proxy Error: Plone ou Apache?

Publicado por Cleber J Santos em 04/07/2009

[ Hits: 8.321 ]

 


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

Resolvendo o problema do flash player 10 no Plone

Criando seu próprio repositório do Pypi

Instalando o Plone 4 core-dev

Bpython, uma interface ncurses para Python

Leitura recomendada

Fortune com gDesklets

Como trocar chave de segurança entre servidores

Instalando VMtools em Máquina Virtual

Coloque seu papo em dia com Pidgin multi-protocolo

Instalando outra HD no Linux

  

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