ERR_CONNECTION_REFUSED

You typed an address, hit Enter, and Chrome bounced back instantly with This site can't be reached and ERR_CONNECTION_REFUSED. No spinner, no waiting. Something on the other end said no the moment your browser knocked. This guide explains why, and how to get back in.

Updated June 2026 · 5 min read

  • Written by

    Andrian Valeanu Andrian Valeanu Founder of Pulsetic

    Andrian Valeanu founded Pulsetic and, before it, Designmodo. Across 15-plus years he has shipped web products, design tools, and monitoring software teams around the world rely on.

  • Reviewed by

    Ionut Caval Ionut Caval Technical reviewer

    Ionut Caval reviews Pulsetic's technical guides for accuracy. He works hands-on with web servers, networking, and uptime monitoring day to day, and makes sure the causes and fixes here hold up in production.

The short version: Double-check the URL and port, then reload. Clear cache and cookies, open an incognito window, and switch off any VPN, proxy, firewall, or antivirus that could be blocking it. Flush DNS and restart your router. And if the website is down for everyone, the fix lives on the server side, not yours.

Key takeaways

  • ERR_CONNECTION_REFUSED is an active no. Your browser sent a TCP SYN; the other end fired a RST (reset) straight back. The rejection lands instantly, with no slow wait.
  • Boil it down and there are two real causes. Either nothing is listening on that port (service stopped, or bound somewhere else), or a firewall is rejecting the connection for the server.
  • Watch the timing. A refusal hits the second you press Enter; a timeout leaves you waiting. No spinner means a refusal, not a host you cannot reach.
  • From the shell, a refusal is curl exit code 7, the same code curl uses for any failed connect. To see what is really listening on the port, run ss -tlnp on the server.
  • Refusals are tied to a single port. A web server on 443 can be perfectly fine while SSH or a database refuses on its own port, so monitor the exact port each service answers on.
Error type
Browser connection error
Whose side
Either: the server, or your local block
Fix difficulty
Easy to moderate
Common cause
Nothing is listening on that port

What does ERR_CONNECTION_REFUSED mean?

ERR_CONNECTION_REFUSED means your browser found the server and knocked, but got a flat no in return. Under the hood, your machine sent a TCP SYN to start the connection and received a RST (reset) instead of a handshake. Two things cause that: nothing is listening on the port you tried (the web service is stopped, or bound to the wrong port), or a firewall is actively rejecting the request and sending the reset on the server's behalf.

Speed gives it away. A refusal is instant because the server flatly turned you away. A timeout does the opposite, leaving your browser to sit and wait for an answer that never arrives. See the error the moment you press Enter and you are almost certainly looking at a refusal, not a slow or unreachable host.

YouDNSNetworkCDN / ProxyWeb serverApp / DB
The path a request takes from your browser to the website's servers. A ERR_CONNECTION_REFUSED is produced at the highlighted stages.
RST
A refused connection is an active TCP reset, sent back instantly
80 / 443
The HTTP and HTTPS ports a browser expects a web server to answer on
0 ms
Refusal is immediate, unlike a timeout that waits for a reply that never comes

How the ERR_CONNECTION_REFUSED error appears

The wording changes depending on your browser, device, or server. Here is how this error commonly shows up:

What a ERR_CONNECTION_REFUSED looks like in the browser. The exact wording varies by browser, device, and server.
  • Chrome / Edge: ERR_CONNECTION_REFUSED
  • Firefox: Unable to connect
  • Safari: Safari can't open the page because the server unexpectedly dropped the connection
  • curl: Failed to connect to host: Connection refused
  • localhost refused to connect
  • Telnet / nc: Connection refused

ERR_CONNECTION_REFUSED vs timed out, reset, unreachable

These four errors look similar but point at very different failures, and knowing which you have narrows the fix immediately.

Error What it means Who fixes it
ERR_CONNECTION_REFUSED The server was reached but actively rejected the connection (nothing listening, or a firewall reset) Website owner, or your local block
ERR_CONNECTION_TIMED_OUT No reply at all within the time limit, often an overloaded server or a silent firewall drop Mostly the website owner or network
ERR_CONNECTION_RESET The connection opened, then was abruptly cut mid-stream Network, firewall, or server
ERR_ADDRESS_UNREACHABLE No route to the host exists, the address cannot be reached at all Routing, DNS, or your network

What sends the reset, and who fixes it

A refusal always comes from something sending a reset; identifying the source points straight at the fix.

What rejected youWhy it happensHow to confirmWho fixes it
Nothing listening on the portThe service is stopped, crashed, or bound to a different portss -tlnp shows no process on that portWebsite owner: start the service or fix the port
Service bound to localhost onlyIt listens on 127.0.0.1 instead of 0.0.0.0, so remote clients are refusedss -tlnp shows 127.0.0.1:port, not 0.0.0.0:portWebsite owner: bind to the public interface
A server firewall REJECT ruleThe firewall answers with an instant RST instead of droppingnc -zv host port refuses immediately rather than hangingWebsite owner: open the port
A local block (VPN, proxy, firewall)Your own software refuses or routes through a server that doesThe website loads on a second network or with the VPN offYou: disable the VPN, proxy, or local firewall

Refused vs timed out vs reset, by what the server did

These three connection failures look alike but reflect three different server responses, and each narrows the fix.

ErrorWhat the server didTimingMost likely cause
Connection refusedSent an instant TCP RST in answer to the SYNImmediate, 0 msNothing listening, or a firewall REJECT
Connection timed outSent nothing at all; the packet was droppedSlow, the full wait windowA firewall DROP, an overloaded server, or a broken route
Connection resetAccepted the connection, then tore it down with a RSTAfter the connection openedA crashing process, an idle-timeout proxy, or a firewall killing the session

What causes ERR_CONNECTION_REFUSED?

  • The web service is down, or not listening on the port the browser is using.
  • The URL carries the wrong port, so you are knocking on a door with no service behind it.
  • A firewall or some security tool is actively rejecting the connection.
  • A proxy or VPN routes your traffic through a server that refuses, or simply cannot reach the target.
  • A stale local DNS entry or browser cache points you at the wrong place.
  • A browser or security extension blocks the request before it ever leaves.
  • For developers: the local server is not running, or it is bound to localhost only.

How to find the cause fast

  1. Open a different website. If everything else loads, the trouble is that one site, not your connection.
  2. Hop to a second network, say Wi-Fi to a phone hotspot, which rules out a local block.
  3. Look hard at the address and port. A missing or wrong port number is a classic cause of an instant refusal.
  4. On your own website, confirm the web service is running and listening on the expected port with ss -tlnp.
What a ERR_CONNECTION_REFUSED looks like from the command line. The grey lines starting with # are explanatory comments.

How ERR_CONNECTION_REFUSED looks from the outside

ERR_CONNECTION_REFUSED is one of the cleaner things to monitor for, since the rejection is immediate and explicit rather than a slow fade into a timeout. Pulsetic runs HTTP(S), TCP, and port checks from 15+ locations every 30 seconds, so a refused connection trips an alert the moment the server quits answering on the expected port. Running from outside your own network, the check also tells you whether the refusal is global or just local to one visitor. Here is the honest catch: a monitor confirms the door is shut from the outside, but it cannot tell you why the service stopped listening.

How to fix ERR_CONNECTION_REFUSED

If you are a visitor

  1. Re-read the URL, make sure the port is right, then reload.
  2. Clear the browser cache and cookies for that website.
  3. Open the site in an incognito or private window, which sidelines extensions.
  4. Drop any VPN or proxy, and turn off proxy settings in your system network options.
  5. Switch off your firewall or antivirus briefly to see if it is the block, then turn it back on.
  6. Flush your DNS cache: ipconfig /flushdns on Windows, or sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder on macOS.
  7. Restart the router to clear any stuck network state.
  8. Before blaming your own setup, check an external uptime tool to see whether the site is down for everyone.

If you run the website or server

  1. Confirm the web service is running and bound to the right port with ss -tlnp.
  2. Open the relevant port (usually 80 and 443) in the server firewall.
  3. Look at the reverse proxy, Nginx or Apache, and make sure its upstream is alive.
  4. Restart the web service and read the logs as it comes back up.
  5. If remote visitors need in, verify the service listens on 0.0.0.0, not just 127.0.0.1.
  6. Put an external monitor on the port so the next refusal pages you before users do.

Still not fixed? Next steps

  • Found the service bound to 127.0.0.1 while remote clients are refused? Rebind it to 0.0.0.0 (or the right interface) and restart. A localhost-only bind refuses every external connection by design.
  • Port open in the firewall, service listening, clients still refused: look upstream. A reverse proxy with a dead backend will reject connections because it has nothing healthy to hand them to.
  • When a refusal shows up only after a deploy or restart, tail the service logs while it comes back. A process that crashes on startup leaves the port unbound, and that reads as a refusal to every visitor.
  • One service refusing while the web server stays healthy is easy to miss. Put an external monitor on that specific port so the next port-level refusal pages you, instead of leaning on a homepage check that would never catch it.

Code & configuration

Copy-paste starting points. Replace example.com and the paths with your own, and test changes on staging before production.

Check what is actually listening on the server

ss -tlnp
# or on older systems:
netstat -tlnp | grep LISTEN

Test the exact port from the client

nc -zv example.com 443
curl -v https://example.com

Open the port in the firewall (Linux ufw example)

sudo ufw allow 443/tcp
sudo ufw reload

How to prevent ERR_CONNECTION_REFUSED

A refused connection means the door is shut: the service is down, the port is closed, or a firewall is rejecting traffic, and every visitor sees it the instant they arrive. Pulsetic checks your website and ports from multiple locations every 30 seconds with HTTP, TCP, and port checks, and the moment a service stops accepting connections it alerts you by email, SMS, voice call, Slack, Discord, Telegram, or webhook. What it measures is reachability from the outside, not your server's CPU or memory.

Learn how Pulsetic's uptime monitoring detects this from the outside, across 15+ locations.

Frequently asked questions

  • What is the difference between ERR_CONNECTION_REFUSED and timed out?

    A refusal is an instant, explicit no: the server fired a reset back. A timeout is silence, with no reply landing inside the limit. Refused points at a stopped service or a firewall reset; timed out points at an overloaded host or a firewall quietly dropping packets.

  • Why does localhost refuse to connect?

    Nearly always because your local server is not running, or it is listening on a port other than the one in your URL. Start the service, check the port matches, and make sure nothing else has already grabbed that port.

  • Is ERR_CONNECTION_REFUSED my fault or the website's?

    Either one. When other sites load fine and only one address fails, it is usually that website's server. When many sites fail, look first at your own network, VPN, proxy, firewall, or DNS.

  • Can a VPN cause ERR_CONNECTION_REFUSED?

    It can. A VPN or proxy sends your traffic through another server, and if that server refuses the connection or cannot reach the target, you land on the same error. Disconnect it and try again to find out.

  • Why does only one website give this error?

    When a single site refuses while everything else works, the problem sits on that site's end: its service is down or its firewall is rejecting you. Or your cache or DNS is steering you to a stale, wrong address for that one domain.

  • How do I find which port is being refused?

    Start with the URL, where the port may sit after the host like example.com:8080; with none written, it defaults to 80 for HTTP and 443 for HTTPS. From the shell, curl -v or nc -zv host port tells you exactly which port got refused.

  • Does restarting fix ERR_CONNECTION_REFUSED?

    Sometimes. Restarting the router or flushing DNS clears stuck network state and stale entries, which helps when the cause is on your side. It changes nothing if the real problem is a stopped service or a firewall on the server.

  • What is the TCP reset (RST) that causes a refusal?

    Opening a connection, your browser sends a TCP SYN packet. A healthy server completes the handshake with a SYN-ACK. Reply with a RST (reset) instead, and the connection is refused right there. The reset comes from one of two places: the operating system, when no service is listening on the port, or a firewall set up to reject rather than quietly drop. That reset is exactly why a refusal is instant.

  • Why does my service refuse remote connections but work fine on the server itself?

    Nine times out of ten it is bound to localhost. A service listening on 127.0.0.1 only takes connections from the same machine, so your local test passes while everyone outside gets refused. Run ss -tlnp and read the address in front of the port. If it says 127.0.0.1:port rather than 0.0.0.0:port or the server's IP, change the bind address in the service config and restart.

  • Does a refused connection mean the firewall is blocking me?

    Not always. A refusal means one of two things: nothing is listening on the port, or a firewall is actively rejecting with a reset. A firewall set to drop traffic gives you a timeout instead, not a refusal. So a refusal fits a stopped service just as well as a REJECT-style rule. Checking ss -tlnp on the server settles it, because it shows whether anything is listening at all.

  • Why did a refusal start right after I restarted or deployed the service?

    Odds are the service never came back up. A process that crashes on start or trips over a config error leaves the port unbound, so every connection is refused until it runs again. Watch the logs as it restarts and confirm the port with ss -tlnp. A reverse proxy pointing at a dead upstream does the same thing, refusing clients because it has nothing healthy to forward to.

  • Can a refusal be intermittent rather than constant?

    It can, and usually that means the service is flapping: crashing and restarting, or a load balancer cycling between healthy and unhealthy backends. A backend that is down refuses on its port; once it recovers, connections go through. One test only catches whatever state you happened to hit, so watch the port continuously from outside to learn how often it really refuses rather than betting on a single lucky attempt.

  • My website answers on 443 but a separate service like SSH or a database keeps refusing. Can I monitor that port specifically?

    Yes, and you should, because a connection refused is port-specific: nothing is listening on that port, or a firewall is sending an instant TCP reset, even while your web server on 443 is perfectly healthy. A web-only check would call the host up and miss it entirely. Pulsetic runs dedicated TCP and port checks alongside its HTTP checks, so you can watch the exact port a service answers on (for example a mail, database, or game-server port) and get alerted the moment it stops accepting connections. Because the check runs from 15+ outside locations, it also tells you whether the refusal is global or just local to one network, which a single attempt from your own machine never can.