Ir para o conteúdo principal

Guias / Corrigir: guias para os erros que aparecem de verdade

ERR_CONNECTION_REFUSED: o que significa e como corrigir

ERR_CONNECTION_REFUSED significa que a máquina de destino recusou ativamente a conexão TCP com um pacote de reset, geralmente porque não há nada escutando naquela porta. A rede funcionou normalmente e entregou uma resposta, só que não a que o navegador esperava.

O que significa ERR_CONNECTION_REFUSED

Uma conexão TCP começa com um handshake: o cliente envia um pacote SYN, e o servidor responde com SYN-ACK se houver um processo vinculado àquela porta. Quando não há nenhum processo escutando, a pilha de rede do sistema operacional devolve um pacote RST, encerrando a tentativa na hora. Esse RST é o que produz o ERR_CONNECTION_REFUSED no Chrome e seus equivalentes em outros navegadores. A conexão chegou até a máquina de destino e recebeu um não bem claro, o que diferencia esse erro de um timeout, em que nada responde.

A resposta RST vem da pilha TCP do kernel, não do código da aplicação, por isso chega em poucos milissegundos em vez de depois de vários segundos de espera. Isso também significa que a máquina em si está de pé e respondendo tráfego de rede; simplesmente não há nada vinculado àquela porta específica que a requisição buscou. Essa distinção importa na hora de decidir por onde começar a olhar: uma conexão recusada aponta para a porta e o processo por trás dela, não para a energia do servidor ou o link de rede.

Como o erro aparece

O Chrome mostra uma página simples "This site can't be reached ... ERR_CONNECTION_REFUSED", sem mais detalhes. O Firefox mostra "Unable to connect" e nomeia o host e a porta que tentou. A linha de comando dá um quadro mais exato:

curl -v https://example.com:8443/
* Trying 203.0.113.10:8443...
* connect to 203.0.113.10 port 8443 failed: Connection refused
* Failed to connect to example.com port 8443 after 2 ms: Connection refused

A mensagem nomeia a porta exata que o curl tentou e reporta a recusa em poucos milissegundos, rápido o suficiente para descartar um timeout. Um telnet host port ou nc -zv host port devolvem a mesma linha "Connection refused".

O que causa o ERR_CONNECTION_REFUSED

  • Não há nada escutando naquela porta. O servidor web, a aplicação ou o proxy que deveria estar vinculado à porta não está em execução.
  • O serviço parou ou caiu. Um processo que encerrou, foi morto por consumir memória demais, ou foi parado para manutenção, deixa a porta desvinculada.
  • Uma regra de firewall recusa a conexão diretamente. Uma regra REJECT devolve o mesmo RST que uma porta fechada devolveria, então, de fora, parece idêntico a não haver nada ali.
  • A porta errada está na URL. Um erro de digitação, um favorito antigo de antes de uma troca de porta, ou um serviço que mudou de porta, todos produzem esse erro contra a porta antiga.
  • Um servidor de desenvolvimento local não está rodando. localhost:3000 recusado quase sempre significa que o servidor de desenvolvimento foi parado ou nunca foi iniciado naquela sessão de terminal.
  • Um proxy ou VPN está mal configurado. Um proxy apontando para um backend que está fora do ar, ou um cliente VPN reescrevendo requisições para uma porta que nada atende, recusa a conexão por conta própria.
  • O mapeamento de porta de um container não bate com a aplicação dentro dele. Um serviço Docker ou Kubernetes cuja porta publicada difere da porta que a aplicação realmente usa produz esse erro mesmo com o processo rodando normalmente.

Como saber de quem é a culpa

Se o site carrega para outras pessoas agora, ou carregou para você há um minuto, o problema é mais provavelmente local: uma VPN, uma configuração de proxy, ou uma regra de firewall na sua própria máquina ou rede. Se falha do mesmo jeito num celular com dados móveis, o lado do servidor está recusando conexões para todo mundo. Rodar uma verificação de HTTP ou de porta a partir de vários lugares ao mesmo tempo resolve isso numa única requisição; se pontos de verificação em vários países reportam a conexão recusada, a causa é o servidor ou seu firewall, não a sua rede.

Como corrigir o ERR_CONNECTION_REFUSED

Se você é o visitante

  1. Confira a URL e a porta. Procure por um erro de digitação, um favorito antigo, ou um link que ainda aponta para uma porta desativada.
  2. Desative sua VPN ou proxy e recarregue. Se o site carregar depois, a configuração de VPN ou proxy é a causa; verifique as configurações ou fale com quem administra.
  3. Tente outra rede, como dados móveis em vez de Wi-Fi, para descartar uma regra de firewall ou roteador local.
  4. Espere e tente de novo. Se o administrador do site está em meio a um deploy ou reiniciando um serviço, a porta pode ficar desvinculada só por alguns segundos.

Se você administra o site

  1. Confirme que o processo está rodando e vinculado à porta esperada:
    ss -ltnp | grep :443
    netstat -tlnp | grep :443
    Um resultado vazio significa que nada está escutando; inicie o serviço ou corrija a porta configurada.
  2. Confira o status do serviço e os logs:
    systemctl status nginx
    journalctl -u nginx -n 50
    Um unit que caiu ou falhou aparece aqui, muitas vezes com o motivo de ter saído.
  3. Verifique se o firewall tem uma regra REJECT na porta:
    iptables -L -n | grep REJECT
    ufw status verbose
    Uma regra REJECT parece idêntica a uma porta fechada vista de fora, então esse passo é fácil de deixar passar.
  4. Confirme que o serviço escuta na interface certa. Um servidor vinculado a 127.0.0.1 em vez de 0.0.0.0 recusa qualquer conexão que venha de fora da máquina, mesmo funcionando normalmente num shell local.
  5. Reinicie o serviço depois de corrigir a configuração, e confirme que a porta está vinculada de novo com o mesmo comando ss antes de considerar o problema resolvido.

Como prevenir o ERR_CONNECTION_REFUSED

Um serviço que cai ou uma regra de firewall acidental costuma aparecer primeiro como conexões recusadas, e não como um alerta vindo do próprio servidor, já que um processo que não está rodando não consegue reportar a própria falha. O monitoramento de porta contínuo detecta isso em minutos, conectando a partir de fora da rede do mesmo jeito que um visitante faria, e envia um alerta por e-mail, SMS, chamada de voz, Slack, Telegram e outros canais assim que uma verificação falha.

Erros relacionados

Perguntas frequentes

O ERR_CONNECTION_REFUSED é a mesma coisa que um firewall me bloqueando?

Pode ser. Uma regra de firewall REJECT produz a mesma resposta RST que uma porta fechada, então os dois parecem idênticos vistos do navegador. Uma regra DROP se comporta diferente e produz um timeout no lugar.

Por que isso acontece só no localhost?

Quase sempre porque o servidor de desenvolvimento local não está rodando naquele terminal, foi parado, ou caiu ao iniciar por causa de um erro de código ou configuração. Confira o terminal onde você costuma iniciá-lo em busca de uma mensagem de erro.

Uma VPN pode causar ERR_CONNECTION_REFUSED?

Sim. Uma VPN que roteia o tráfego por um proxy ou gateway pode recusar conexões em nome do gateway se o backend dele estiver fora do ar, mesmo com o servidor de destino real funcionando bem.

O ERR_CONNECTION_REFUSED significa que o site está fora do ar para todo mundo?

Não necessariamente. Teste numa segunda rede ou rode uma verificação a partir de vários lugares antes de concluir isso. Uma única regra de firewall mal configurada ou uma VPN local podem produzir o mesmo erro enquanto o site funciona bem para todo mundo.

Qual a diferença entre recusado e resetado?

Recusado significa que a tentativa de conexão nunca se completou; o destino a rejeitou de imediato. Resetado significa que a conexão foi estabelecida e estava funcionando, e depois foi derrubada no meio do caminho, geralmente por algo mais adiante na rota.

Como descubro qual processo deveria estar escutando?

Confira os próprios logs de inicialização da aplicação e a configuração dela para saber qual porta ela espera usar. Se o processo está rodando mas vinculado a uma porta diferente da que a URL usa, atualize a URL ou a configuração para que as duas combinem, e depois confirme com ss -ltnp que a porta agora está vinculada como esperado.

Verificar agora

Faça a verificação gratuita no seu próprio site, sem precisar de conta.

Port check

Monitorar permanentemente

Seja avisado no momento em que algo quebrar: o HostTracker verifica de mais de 300 localidades e notifica você por e-mail, SMS, Slack, Telegram e mais.

Recursos do HostTracker

Mais nesta seção: Corrigir: guias para os erros que aparecem de verdade