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
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
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 aRST(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 -tlnpon 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.
- 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:
This site can't be reached
example.com refused to connect.
ERR_CONNECTION_REFUSED
Chrome / Edge: ERR_CONNECTION_REFUSEDFirefox: Unable to connectSafari: Safari can't open the page because the server unexpectedly dropped the connectioncurl: Failed to connect to host: Connection refusedlocalhost refused to connectTelnet / 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 you | Why it happens | How to confirm | Who fixes it |
|---|---|---|---|
| Nothing listening on the port | The service is stopped, crashed, or bound to a different port | ss -tlnp shows no process on that port | Website owner: start the service or fix the port |
| Service bound to localhost only | It listens on 127.0.0.1 instead of 0.0.0.0, so remote clients are refused | ss -tlnp shows 127.0.0.1:port, not 0.0.0.0:port | Website owner: bind to the public interface |
| A server firewall REJECT rule | The firewall answers with an instant RST instead of dropping | nc -zv host port refuses immediately rather than hanging | Website owner: open the port |
| A local block (VPN, proxy, firewall) | Your own software refuses or routes through a server that does | The website loads on a second network or with the VPN off | You: 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.
| Error | What the server did | Timing | Most likely cause |
|---|---|---|---|
| Connection refused | Sent an instant TCP RST in answer to the SYN | Immediate, 0 ms | Nothing listening, or a firewall REJECT |
| Connection timed out | Sent nothing at all; the packet was dropped | Slow, the full wait window | A firewall DROP, an overloaded server, or a broken route |
| Connection reset | Accepted the connection, then tore it down with a RST | After the connection opened | A 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
- Open a different website. If everything else loads, the trouble is that one site, not your connection.
- Hop to a second network, say Wi-Fi to a phone hotspot, which rules out a local block.
- Look hard at the address and port. A missing or wrong port number is a classic cause of an instant refusal.
- On your own website, confirm the web service is running and listening on the expected port with
ss -tlnp.
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
- Re-read the URL, make sure the port is right, then reload.
- Clear the browser cache and cookies for that website.
- Open the site in an incognito or private window, which sidelines extensions.
- Drop any VPN or proxy, and turn off proxy settings in your system network options.
- Switch off your firewall or antivirus briefly to see if it is the block, then turn it back on.
- Flush your DNS cache:
ipconfig /flushdnson Windows, orsudo dscacheutil -flushcache; sudo killall -HUP mDNSResponderon macOS. - Restart the router to clear any stuck network state.
- 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
- Confirm the web service is running and bound to the right port with
ss -tlnp. - Open the relevant port (usually 80 and 443) in the server firewall.
- Look at the reverse proxy, Nginx or Apache, and make sure its upstream is alive.
- Restart the web service and read the logs as it comes back up.
- If remote visitors need in, verify the service listens on
0.0.0.0, not just127.0.0.1. - 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.1while remote clients are refused? Rebind it to0.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 -vornc -zv host porttells 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
SYNpacket. A healthy server completes the handshake with aSYN-ACK. Reply with aRST(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.1only takes connections from the same machine, so your local test passes while everyone outside gets refused. Runss -tlnpand read the address in front of the port. If it says127.0.0.1:portrather than0.0.0.0:portor 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 -tlnpon 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.
-
Catch the next outage before your visitors do.
2-minute setup · Cancel any time
-
No credit card needed