ERR_EMPTY_RESPONSE
RESPOSTA DIRETA
`ERR_EMPTY_RESPONSE` significa que a conexão foi estabelecida, mas encerrada antes que o navegador recebesse cabeçalhos HTTP ou dados do corpo da resposta utilizáveis. Teste a URL com falha em outro navegador ou rede e, em seguida, use um cliente detalhado e logs correlacionados do servidor web, PHP-FPM, aplicação, proxy e sistema para descobrir qual camada encerrou a conexão. As causas comuns incluem um worker da aplicação que travou, capacidade esgotada do Nginx ou de descritores de arquivo, um upstream indisponível ou configurações incompatíveis de keepalive do proxy.
Pontos principais
ERR_EMPTY_RESPONSEsignifica que a conexão terminou sem uma resposta HTTP utilizável; é diferente de conexão recusada e de timeout.- Teste o caminho exato que falhou em outro navegador, dispositivo ou rede antes de alterar a configuração do servidor.
- Use uma requisição detalhada pela linha de comando e timestamps precisos para correlacionar o comportamento do cliente com os logs do proxy, servidor web, PHP-FPM, aplicação e sistema.
- As causas comuns no servidor incluem workers do PHP-FPM encerrados, falhas da aplicação, capacidade esgotada do Nginx ou de descritores de arquivo e resets de conexão do upstream.
- Reverse proxies podem revelar incompatibilidades de keepalive ou timeout quando um upstream fecha uma conexão que o proxy tenta reutilizar.
- Colete evidências antes de reiniciar serviços ou aumentar limites e faça alterações em produção somente por meio de um processo operacional aprovado.
Site Administrator
O que este erro significa e como reconhecê-lo
- O navegador exibe
ERR_EMPTY_RESPONSEem vez de um status HTTP como200,404ou500. - A requisição falha antes que o navegador receba cabeçalhos de resposta, HTML ou uma página de erro da aplicação.
- Recarregar a página pode funcionar ocasionalmente se um worker, pool de conexões ou serviço upstream se recuperar.
- Um hostname ou uma rota pode falhar enquanto outros sites permanecem acessíveis.
- Uma requisição detalhada pela linha de comando pode mostrar que a conexão TCP é aberta e depois encerrada sem cabeçalhos de resposta.
- A URL pública pode falhar por meio de um reverse proxy, enquanto uma requisição autorizada ao serviço upstream apresenta comportamento diferente.
- O erro pode afetar apenas um navegador, dispositivo, rede de origem, VPN ou caminho de proxy.
Causas principais, por probabilidade
- A aplicação ou o worker do PHP-FPM foi encerrado antes de enviar uma resposta. Erros fatais na aplicação, travamentos de workers, limites de processos, pressão de memória ou dependências indisponíveis podem encerrar a requisição antes que uma resposta HTTP normal seja gerada.
- O Nginx ou o host atingiu a capacidade de conexões ou de descritores de arquivo.
worker_connectionsefetivo, limites de arquivos abertos, conexões ativas e memória disponível afetam a conclusão das requisições e das conexões com o upstream. - Um reverse proxy não consegue manter uma conexão válida com o upstream. Comportamento incompatível de keepalive, reutilização de conexões, valores de timeout ou configurações do proxy podem fazer a conexão do cliente ser encerrada antes da chegada dos cabeçalhos do upstream.
- O serviço upstream está indisponível ou reseta conexões. Um serviço pode estar em execução, mas incapaz de aceitar, processar ou concluir a requisição.
- Um firewall, VPN, WAF, load balancer ou outro dispositivo de rede encerra a conexão. Isso é mais provável quando o erro depende da rede do cliente, do endereço de origem ou da rota.
- Uma condição local do navegador interfere na requisição. Extensões, estado de conexão em cache, proxy local, VPN ou software de segurança podem produzir um sintoma semelhante quando outros clientes funcionam normalmente.
Como corrigir
1. Determine o escopo da falha
Registre o hostname, o caminho exato, o horário aproximado com fuso horário, o cliente, a rede e se a falha é consistente. Teste o mesmo caminho em uma janela anônima, outro navegador, outro dispositivo e — se permitido — outra rede.
Se apenas um navegador ou dispositivo falhar, investigue primeiro extensões, configurações de proxy local, software de VPN, estado de conexão em cache e controles de segurança do endpoint. Não presuma que a página inicial seja representativa; teste a rota específica que falha.
2. Verifique se o cliente recebe cabeçalhos de resposta
A partir de um cliente afetado ou próximo, faça uma requisição somente de leitura ao destino autorizado. Substitua os valores entre colchetes pelo hostname e caminho reais:
curl -v https://[your hostname]/[path]Se a conexão for encerrada sem cabeçalhos de resposta, isso reforça o diagnóstico de resposta vazia. Se um status HTTP for retornado, investigue esse status, o redirecionamento, o comportamento do TLS ou a renderização do navegador. Quando possível, compare a saída detalhada de um cliente funcional e de um cliente com falha.
3. Correlacione a requisição com os logs do servidor
Use o horário e o caminho exatos para inspecionar:
- Os logs de acesso e de erro do Nginx ou do servidor web relevante.
- Os logs do PHP-FPM, se a rota executar PHP.
- Os logs da aplicação em busca de erros fatais, exceções não tratadas e dependências que falharam.
- Os logs do sistema operacional em busca de eventos de falta de memória, encerramento de processos, esgotamento de descritores de arquivo e falhas de serviço.
Uma entrada no access log sem uma resposta upstream concluída, um reset do upstream ou uma mensagem de encerramento de worker ajuda a identificar qual camada fechou a conexão. O erro do navegador, por si só, não identifica o componente responsável.
4. Verifique a saúde do PHP-FPM e da aplicação
Para uma rota dinâmica, determine se o PHP-FPM tem workers disponíveis e se os workers estão saindo repetidamente, atingindo limites configurados ou sendo encerrados pelo sistema operacional. Verifique deployments recentes, erros fatais, pressão de memória, chamadas lentas ao banco de dados e outras dependências bloqueadas.
Altere limites do PHP-FPM, o código da aplicação ou o estado do serviço somente depois de confirmar as evidências relevantes e avaliar a capacidade e o impacto operacional. Um restart pode limpar temporariamente workers com falha, mas não corrigirá um crash recorrente, esgotamento de recursos ou defeito na aplicação. Se um restart for autorizado, capture os logs e o estado dos processos antes de executá-lo.
5. Verifique a capacidade de conexões e descritores de arquivo do Nginx
Revise a configuração efetiva do Nginx e os limites do sistema operacional para o serviço afetado. Examine worker_connections, o comportamento dos processos workers, as conexões ativas, os limites de arquivos abertos, a memória disponível e as mensagens de erro que indiquem que um limite de recurso foi atingido.
Não aumente simplesmente worker_connections. O limite de descritores de arquivo do sistema operacional e a memória disponível precisam comportar a alteração. Registre os valores atuais e as condições de tráfego, siga o procedimento de alteração aprovado e valide o resultado após um reload ou restart controlado, se um deles for autorizado.
6. Isole uma falha do reverse proxy ou do upstream
Se houver uma CDN, load balancer, ingress ou reverse proxy Nginx na frente da aplicação, compare:
- A requisição pública através do proxy.
- Uma requisição autorizada ao upstream a partir do host do proxy ou de um ponto de teste interno equivalente.
- Os logs de erro do proxy e os logs da aplicação upstream para o mesmo timestamp.
Verifique se o proxy está reutilizando uma conexão que o upstream já fechou, se as configurações de keepalive são compatíveis e se os timeouts do proxy e do upstream são adequados para a rota. Altere uma configuração relacionada por vez, documente o impacto esperado e repita o mesmo teste.
7. Verifique os controles de rede e segurança
Se não houver entrada no log do servidor web no horário da falha, inspecione o firewall, a VPN, o WAF, o load balancer, o roteamento e o caminho de segurança do cliente. Compare uma rede de origem funcional com a que apresenta falha e procure decisões de política, resets de conexão ou tratamento de conexões ociosas que correspondam ao timestamp.
Se a conexão desaparecer antes de chegar ao servidor web, encaminhe o caso à equipe de rede ou hospedagem em vez de alterar o código da aplicação.
8. Valide a correção preservando as evidências
Após uma alteração aprovada na aplicação, configuração ou rede, repita os mesmos testes de caminho e cliente. Confirme que a resposta agora inclui cabeçalhos e um status HTTP apropriado, não apenas que o navegador deixou de exibir a mensagem original. Revise os logs do proxy, servidor web, upstream, aplicação e sistema e mantenha os valores de configuração anteriores e posteriores para comparação ou rollback.
Prevenção e como verificar a correção
- Monitore erros do servidor web, resets do upstream, disponibilidade de workers do PHP-FPM, encerramentos de processos, pressão de memória, uso de arquivos abertos e alertas de limite de conexões.
- Documente as políticas de reverse proxy, keepalive do upstream e timeout e teste-as após alterações na infraestrutura.
- Inclua um identificador de requisição ou um timestamp preciso com fuso horário nos relatórios de incidentes para que os logs do proxy, servidor web e aplicação possam ser correlacionados.
- Faça testes de capacidade das configurações de conexão e descritores de arquivo antes de aumentar o tráfego ou alterar a quantidade de workers.
- Faça deployments de alterações da aplicação com um plano de rollback e monitore imediatamente erros fatais, crashes de workers e falhas de dependências.
- Mantenha um procedimento autorizado para testar separadamente o endpoint público e o serviço upstream.
- Mantenha restarts de serviços e alterações de limites em produção dentro de um processo de alteração aprovado.
Quando buscar ajuda externa
Encaminhe o caso à equipe de servidor ou hospedagem quando o erro afetar vários clientes ou redes, ou quando coincidir com crashes de workers, esgotamento de recursos ou resets recorrentes do upstream. Contate a equipe de rede quando não houver entrada no log do servidor web e uma camada de firewall, VPN, WAF, load balancer ou roteamento puder estar fechando a conexão.
Forneça o hostname e o caminho, timestamps com fuso horário, comparações entre clientes e redes, a saída da requisição detalhada e trechos relevantes dos logs do proxy, servidor web, PHP-FPM, aplicação e sistema. Evite restarts repetidos ou alterações de configuração em produção sem autorização, especialmente antes de capturar as evidências da falha.
Perguntas frequentes
ERR_EMPTY_RESPONSE é o mesmo que conexão recusada?
Não. Em geral, conexão recusada significa que a tentativa de conexão foi rejeitada porque não havia um listener ou uma regra de acesso respondeu naquele ponto. ERR_EMPTY_RESPONSE descreve uma conexão que terminou sem uma resposta HTTP utilizável; portanto, um servidor web, upstream, proxy ou dispositivo de rede pode tê-la fechado após o estabelecimento da conexão.
ERR_EMPTY_RESPONSE é o mesmo que timeout?
Não. Timeout significa que o cliente esperou além de um intervalo esperado sem concluir a troca de rede ou HTTP necessária. Com ERR_EMPTY_RESPONSE, a conexão geralmente é fechada sem cabeçalhos de resposta, embora o comportamento exato do navegador dependa de onde a falha ocorre.
O PHP-FPM pode causar ERR_EMPTY_RESPONSE?
Sim. Se um worker do PHP-FPM travar, for encerrado ou não conseguir concluir a requisição, o caminho entre o servidor web e a aplicação poderá terminar antes que uma resposta normal seja gerada. Confirme isso nos logs do PHP-FPM, da aplicação, do servidor web e do sistema, em vez de presumir que o PHP-FPM é o responsável.
Por que verificar worker_connections do Nginx?
Se o Nginx atingir sua capacidade efetiva de conexões ou descritores de arquivo, poderá não conseguir lidar de forma confiável com novas conexões ou conexões com o upstream. Verifique os logs de erro e os limites do sistema operacional antes de alterar a configuração; aumentá-la sem capacidade correspondente no sistema pode criar outro problema de recursos.
Como um reverse proxy pode produzir uma resposta vazia?
Um proxy pode fechar a conexão do cliente quando sua conexão com o upstream é resetada, reutilizada depois que o upstream a fechou ou encerrada devido a um comportamento incompatível de keepalive ou timeout. Compare os logs do proxy com um teste autorizado do upstream e verifique as configurações de conexão nos dois lados.
O que devo coletar antes de pedir ajuda?
Colete o hostname e o caminho exatos, os timestamps das falhas, os resultados de mais de um cliente ou rede, a saída da requisição detalhada e os logs correlacionados do proxy, servidor web, PHP-FPM, aplicação e sistema. Isso ajuda a identificar qual camada fechou a conexão e evita suposições.
Documentação adicional
Para um acompanhamento com fontes oficiais, consulte a documentação do servidor web utilizado, do PHP-FPM, do produto de reverse proxy ou load balancing e dos limites de conexão e descritores de arquivo do sistema operacional. Concentre-se na referência de logs de erro do produto, na configuração de upstream e keepalive, nos limites de workers ou conexões, no comportamento de timeout e nos procedimentos de alteração ou rollback do serviço.