Přejít na hlavní obsah

Návody / Opravte to: návody na chyby, se kterými se lidé skutečně setkávají

ERR_CONNECTION_REFUSED: co to znamená a jak to opravit

ERR_CONNECTION_REFUSED znamená, že cílový počítač aktivně odmítl TCP spojení paketem reset, obvykle proto, že na daném portu nikdo neposlouchá. Síť fungovala v pořádku a doručila odpověď, jen ne tu, kterou váš prohlížeč chtěl.

Co znamená ERR_CONNECTION_REFUSED

TCP spojení začíná handshake: klient pošle paket SYN a server odpoví SYN-ACK, pokud je na daném portu navázaný nějaký proces. Když na portu nikdo neposlouchá, síťový stack operačního systému místo toho pošle zpátky paket RST a pokus rovnou ukončí. Právě tenhle RST v Chrome vyprodukuje ERR_CONNECTION_REFUSED a v jiných prohlížečích jeho ekvivalent. Spojení dorazilo k cílovému počítači a dostalo jasné ne, což tuhle chybu odlišuje od timeoutu, kde neodpoví vůbec nic.

Odpověď RST přichází ze stacku TCP jádra, ne z žádného kódu aplikace, a proto dorazí během pár milisekund místo po několika vteřinách čekání. Znamená to taky, že samotný počítač běží a odpovídá na síťový provoz; jen na konkrétním portu, na který požadavek mířil, nemá nic navázané. Na tomhle rozlišení záleží při rozhodování, kam se podívat nejdřív: odmítnuté spojení ukazuje na port a proces za ním, ne na napájení serveru nebo jeho síťové připojení.

Jak se chyba projevuje

Chrome zobrazí obyčejnou stránku "This site can't be reached ... ERR_CONNECTION_REFUSED" bez dalších podrobností. Firefox hlásí "Unable to connect" a jmenuje hostitele a port, který zkusil. Příkazová řádka dá přesnější obraz:

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

Zpráva jmenuje přesný port, který curl zkusil, a hlásí odmítnutí během pár milisekund, dost rychle na to, aby to vyloučilo timeout. telnet host port nebo nc -zv host port vrátí stejný řádek "Connection refused".

Co způsobuje ERR_CONNECTION_REFUSED

  • Na daném portu nikdo neposlouchá. Webový server, aplikace nebo proxy, které by na portu měly být navázané, neběží.
  • Služba se zastavila nebo spadla. Proces, který skončil, byl zabit kvůli spotřebě příliš mnoha paměti, nebo byl zastaven kvůli údržbě, nechá port nenavázaný.
  • Pravidlo firewallu spojení rovnou odmítá. Pravidlo REJECT posílá zpátky stejný RST, jaký by poslal zavřený port, takže to zvenčí vypadá úplně stejně, jako kdyby tam nic nebylo.
  • V URL je špatný port. Překlep, stará záložka z doby před změnou portu, nebo služba, která se přesunula na jiný port, to všechno vyprodukuje tuhle chybu proti starému portu.
  • Lokální vývojový server neběží. Odmítnutý localhost:3000 skoro vždy znamená, že vývojový server byl v daném terminálu zastavený nebo se v této relaci vůbec nespustil.
  • Proxy nebo VPN jsou špatně nastavené. Proxy mířící na backend, který je nedostupný, nebo klient VPN přepisující požadavky na port, který nic neobsluhuje, odmítne spojení sám za sebe.
  • Mapování portu kontejneru neodpovídá aplikaci uvnitř. Služba Docker nebo Kubernetes, jejíž zveřejněný port se liší od portu, na kterém se aplikace skutečně naváže, vyprodukuje tuhle chybu, i když samotný proces běží a je zdravý.

Jak zjistit, čí je to chyba

Pokud se web právě teď načítá jiným lidem, nebo se vám načetl před minutou, problém bude spíš lokální: VPN, nastavení proxy nebo pravidlo firewallu na vašem vlastním počítači nebo síti. Pokud selže stejně z telefonu na mobilních datech, odmítá spojení strana serveru pro každého. Spuštění HTTP nebo port kontroly z několika míst najednou to vyřeší jedním požadavkem; pokud kontrolní body ve více zemích hlásí odmítnuté spojení, příčinou je server nebo jeho firewall, ne vaše síť.

Jak opravit ERR_CONNECTION_REFUSED

Pokud jste návštěvník

  1. Ověřte URL a port. Zkontrolujte, jestli nejde o překlep, starou záložku, nebo odkaz, který pořád míří na vyřazený port.
  2. Vypněte VPN nebo proxy a načtěte stránku znovu. Pokud se pak web načte, příčinou je nastavení VPN nebo proxy; zkontrolujte jeho nastavení nebo kontaktujte, kdo ho spravuje.
  3. Zkuste jinou síť, například mobilní data místo Wi-Fi, abyste vyloučili lokální firewall nebo pravidlo routeru.
  4. Počkejte a zkuste to znovu. Pokud provozovatel webu právě nasazuje novou verzi nebo restartuje službu, port může být nenavázaný jen na pár vteřin.

Pokud web provozujete

  1. Ověřte, že proces běží a je navázaný na očekávaný port:
    ss -ltnp | grep :443
    netstat -tlnp | grep :443
    Prázdný výsledek znamená, že nikdo neposlouchá; spusťte službu nebo opravte její nastavený port.
  2. Zkontrolujte stav služby a logy:
    systemctl status nginx
    journalctl -u nginx -n 50
    Spadlá nebo selhaná jednotka se tady objeví, často i s důvodem, proč skončila.
  3. Zkontrolujte firewall kvůli pravidlu REJECT na daném portu:
    iptables -L -n | grep REJECT
    ufw status verbose
    Pravidlo REJECT vypadá zvenčí úplně stejně jako zavřený port, takže je snadné tenhle krok přehlédnout.
  4. Ověřte, že služba poslouchá na správném rozhraní. Server navázaný na 127.0.0.1 místo 0.0.0.0 odmítne každé spojení přicházející zvenčí počítače, i když funguje v pořádku z lokálního shellu.
  5. Restartujte službu po opravě konfigurace a ověřte stejným příkazem ss, že je port znovu navázaný, než problém prohlásíte za vyřešený.

Jak předejít ERR_CONNECTION_REFUSED

Spadlá služba nebo náhodné pravidlo firewallu se obvykle nejdřív projeví jako odmítnutá spojení, ne jako upozornění od samotného serveru, protože proces, který neběží, nemůže hlásit vlastní selhání. Pravidelný monitoring portů tohle zachytí během minut tím, že se připojuje zvenčí sítě stejným způsobem jako návštěvník, a pošle upozornění e-mailem, SMS, hlasovým hovorem, přes Slack, Telegram a další kanály ve chvíli, kdy kontrola selže.

Související chyby

Často kladené otázky

Je ERR_CONNECTION_REFUSED totéž jako blokace firewallem?

Může být. Pravidlo firewallu REJECT vyprodukuje stejnou odpověď RST jako zavřený port, takže obojí vypadá z prohlížeče identicky. Pravidlo DROP se chová jinak a místo toho vyprodukuje timeout.

Proč se tohle stává jen na localhost?

Skoro vždy proto, že lokální vývojový server v daném terminálu neběží, byl zastaven, nebo při startu spadl kvůli chybě v kódu nebo konfiguraci. Zkontrolujte terminál, ve kterém ho obvykle spouštíte, jestli tam není chybová zpráva.

Může ERR_CONNECTION_REFUSED způsobit VPN?

Ano. VPN, která směruje provoz přes proxy nebo bránu, může odmítnout spojení jménem té brány, pokud je její vlastní backend nedostupný, i když je skutečný cílový server zdravý.

Znamená ERR_CONNECTION_REFUSED, že je web nedostupný pro každého?

Ne nutně. Než k tomu dojdete, otestujte to z druhé sítě nebo spusťte kontrolu z více míst. Jedno špatně nastavené pravidlo firewallu nebo lokální VPN mohou vyprodukovat stejnou chybu, zatímco web funguje pro každého jiného v pořádku.

Jaký je rozdíl mezi odmítnutím a resetem?

Odmítnutí znamená, že se pokus o spojení nikdy nedokončil; cíl ho okamžitě odmítl. Reset znamená, že spojení bylo navázané a fungovalo, a pak bylo uprostřed přerušené, obvykle něčím dál na cestě.

Jak zjistím, který proces by měl poslouchat?

Zkontrolujte vlastní startovací logy aplikace a její konfiguraci ohledně portu, na který se má navázat. Pokud proces běží, ale je navázaný na jiný port, než jaký používá URL, buď aktualizujte URL, nebo konfiguraci, aby si obě odpovídaly, a pak stejným příkazem ss -ltnp potvrďte, že je port teď navázaný podle očekávání.

Zkontrolovat hned

Spusťte bezplatnou kontrolu na svém webu - bez registrace.

Port check

Sledovat trvale

Dostanete upozornění ve chvíli, kdy něco přestane fungovat: HostTracker kontroluje z více než 300 lokalit a upozorní vás e-mailem, SMS, přes Slack, Telegram a další.

Funkce HostTracker

Více v této sekci: Opravte to: návody na chyby, se kterými se lidé skutečně setkávají