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:3000skoro 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
- 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.
- 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.
- Zkuste jinou síť, například mobilní data místo Wi-Fi, abyste vyloučili lokální firewall nebo pravidlo routeru.
- 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
- Ověřte, že proces běží a je navázaný na očekávaný port:
Prázdný výsledek znamená, že nikdo neposlouchá; spusťte službu nebo opravte její nastavený port.ss -ltnp | grep :443 netstat -tlnp | grep :443 - Zkontrolujte stav služby a logy:
Spadlá nebo selhaná jednotka se tady objeví, často i s důvodem, proč skončila.systemctl status nginx journalctl -u nginx -n 50 - Zkontrolujte firewall kvůli pravidlu REJECT na daném portu:
Pravidlo REJECT vypadá zvenčí úplně stejně jako zavřený port, takže je snadné tenhle krok přehlédnout.iptables -L -n | grep REJECT ufw status verbose - Ověřte, že služba poslouchá na správném rozhraní. Server navázaný na
127.0.0.1místo0.0.0.0odmítne každé spojení přicházející zvenčí počítače, i když funguje v pořádku z lokálního shellu. - 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
- ERR_CONNECTION_TIMED_OUT nastane, když na pokus o spojení vůbec nic neodpoví, místo aby ho aktivně odmítlo.
- ERR_CONNECTION_RESET nastane, když bylo spojení přijaté a pak uprostřed přerušené.
- This site can't be reached pokrývá celou sadu chyb spojení, které Chrome řadí pod jeden nadpis.
Č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í.