Conseguimos rastrear um problema que está travando nosso servidor NGINX executando o Magento até o seguinte ponto:
Informação de fundo: O Magento Backend tem uma função CMS com um editor WYSIWYG.
Este editor carrega algumas imagens através de um controlador em magento (cms / directive).
Quando definimos o nível de error_log do NGINX para info, obtemos as seguintes linhas (quebra de linha inserida para melhor legibilidade):
2012/10/22 18:05:40 [info] 14105#0: *1 client closed prematurely connection,
so upstream connection is closed too while sending request to upstream, client:
XXXXXXXXX, server: test.local, request: "GET
index.php/admin/cms_wysiwyg/directive/___directive/BASEENCODEDIMAGEURL,,/
HTTP/1.1",
upstream: "fastcgi://127.0.0.1:9024", host: "test.local"
Ao verificar o código no depurador, a chamada a seguir nunca retorna (em ´Varien_Image_Adapter_Abstract :: getMimeType () '
# $this->_fileName is http://test.local/skin/adminhtml/base/default/images/demo-image-not-existing.gif'
# $_SERVER['REQUEST_URI'] = http://test.local/admin/cms_wysiwyg/directive/___directive/BASEENCODEDIMAGEURL
list($this->_imageSrcWidth, $this->_imageSrcHeight, $this->_fileType, ) = getimagesize($this->_fileName);
As solicitações de nome de arquivo são
- um URL para o mesmo servidor que está solicitando o script
- um link para um .gif estático que não existe.
URL da amostra:
http://test.local/skin/adminhtml/base/default/images/demo-image-not-existing.gif
Quando a linha acima é executada, qualquer solicitação subseqüente ao servidor NGNIX não responde mais. Depois de esperar por cerca de 10 minutos, o servidor NGINX inicia as solicitações de resposta novamente.
Eu tentei reproduzir o erro com um script de teste simples que só chama getimagesize()
com a URL fornecida - mas isso não falha. Simples leva a uma exceção dizendo que a URL não pôde ser carregada (o que é bom, pois a URL está errada)