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 quanto 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 está o problema. 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 nehum erro em seus logs, já o Apache mostrou-se saber bem dos erros:
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 (http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#envsettings). Percebi então que isso é um bug dessa versão do Apache,
por que?
Bem, isso poderia ocorrer por um dos 3 motivos:
Normalmente o cabeçalho é disparado ao Zope/plone e no qual fecharia a conexão corretamente.
Em https://issues.apache.org/bugzilla/show_bug.cgi?id=37770, existe uma discussões, no qual este Bug no Apache é 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 modulo proxy (mod_proxy).
Agora as coisas assam a ficar um cadinho mais fácil né :-) descoberto nosso gargalo vamos a solução.
Podemos migrar para a versão 2.2.10 do Apache ou se tiver alguma mais atual, onde o bug esta corrigido, ou colocar dois parâmetros no arquivo de configuração do virtual host, que são:
Porém, cada caso é um caso, aqui o problema que ocorreu foi por conta deste Bug, mas poderia ser 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.
Efetuei alguns testes e pesquisas sobre os erros no log do Apache, pois o Zope não estava registrando nehum 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 (http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#envsettings). Percebi então que isso é um bug dessa versão do Apache,
por que?
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.
Em https://issues.apache.org/bugzilla/show_bug.cgi?id=37770, existe uma discussões, no qual este Bug no Apache é 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 modulo proxy (mod_proxy).
Agora as coisas assam a ficar um cadinho mais fácil né :-) descoberto nosso gargalo vamos a solução.
Solução:
Podemos migrar para a versão 2.2.10 do Apache ou se tiver alguma mais atual, onde o bug esta corrigido, ou colocar dois parâmetros no arquivo de configuração do virtual host, que são:
<VirtualHost *:80>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.
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
</VirtualHost>
Porém, cada caso é um caso, aqui o problema que ocorreu foi por conta deste Bug, mas poderia ser 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.