Cómo solucionar err_connection_refused (conexión rechazada)

Publicado:

16 min de lectura

Acar Diveroli
Autor: Acar Diveroli
Servidor con el puerto 443 tapado en la placa de E/S; un haz azul acaba en la tapa y una línea RST discontinua apunta atrás

Escribes la dirección de tu router, abres una pequeña tienda online o arrancas un proyecto en tu propio equipo y entras en localhost:3000. En lugar de la página, Chrome muestra «No se puede acceder a este sitio web» (en Chrome en inglés, "This site can't be reached"), una línea gris como «La página localhost ha rechazado la conexión.» y ERR_CONNECTION_REFUSED abajo del todo. Al recargar vuelve la misma pantalla, igual de rápido.

Esa rapidez es una pista: el navegador encontró la máquina, y la máquina dijo que no. A continuación: qué significa el rechazo y en qué se diferencia de un tiempo de espera agotado, las comprobaciones para visitantes y teléfonos, qué cambiar si el servidor es tuyo, por qué localhost rechaza la conexión y el mismo error dentro de scripts que usan un proxy.

¿Qué significa ERR_CONNECTION_REFUSED?

Cada servidor tiene puertas numeradas llamadas puertos, y cada programa que funciona en él espera detrás de una. Las páginas web usan el puerto 443 para https:// y el puerto 80 para http://; un número después de dos puntos, como en localhost:3000, elige otra puerta.

«Rechazada» significa que tu llamada llegó a la máquina, pero detrás de esa puerta no escuchaba ningún programa. La máquina contesta con una breve señal de restablecimiento (RST), la respuesta que el estándar TCP prescribe para una petición que no coincide con ningún programa en espera (RFC 9293, sección 3.5.2).

Así que la dirección es correcta y la máquina está encendida; el programa falta o está detrás de otra puerta. Por eso borrar la caché o cambiar el DNS no sirve: la página nunca llegó, y el nombre ya se había encontrado.

¿Cómo se produce un rechazo, paso a paso?

  1. El navegador convierte el nombre del sitio en una dirección IP, la dirección numérica del servidor. Si eso falla, lo que ves es un error de DNS.
  2. Elige el puerto: 443, 80 o el número que va después de los dos puntos.
  3. Envía a esa dirección y ese puerto una petición de «¿puedo conectarme?».
  4. El sistema operativo del servidor no encuentra ningún programa escuchando en ese puerto.
  5. Devuelve un restablecimiento, normalmente en milisegundos, y el navegador muestra que se ha rechazado la conexión.

Un firewall configurado para rechazar conexiones, en lugar de ignorarlas, puede enviar la misma respuesta en nombre del servidor.

¿Cómo se ve el error en cada navegador?

NavegadorQué dice la pantallaCódigo
Chrome, Edge, Brave, Opera«No se puede acceder a este sitio web», «La página example.com ha rechazado la conexión.» y una lista Prueba a: con «Comprobar la conexión» y «Comprobar el proxy y el cortafuegos»ERR_CONNECTION_REFUSED
Firefox«No se puede conectar»Ninguno

Apuntamos Chromium, el motor de código abierto que hay detrás de Chrome, Edge, Brave y Opera, a un puerto cerrado y obtuvimos exactamente estas líneas. Son los textos de Chrome en español de España; en el de Latinoamérica, el título es «No se puede acceder a este sitio» y la línea, «example.com rechazó la conexión». El título de Firefox sale de los propios archivos de textos de Mozilla. Safari usa su propia redacción; las comprobaciones de abajo son las mismas.

Rechazo, tiempo de espera o restablecimiento: ¿cuál es tu caso?

La misma pantalla gris puede llevar varios códigos, y cada uno apunta a un paso distinto. Aquí están junto al error de proxy con el que se suelen confundir:

CódigoQué pasóCausa habitualPrimer paso
ERR_CONNECTION_REFUSEDLa máquina respondió: ahí no escucha nadaServicio detenido, puerto equivocado o httpsRevisa la dirección
ERR_CONNECTION_TIMED_OUTNinguna respuestaServidor apagado, un firewall que descarta el tráfico¿Está caído para todos?
ERR_CONNECTION_RESETSe abrió una conexión y luego se cortóSoftware de seguridad, VPN, filtro de redPrueba otra red
ERR_PROXY_CONNECTION_FAILEDTu ajuste de proxy no funcionaUn proxy que se quedó configurado o que está detenidoQuita o corrige el proxy

Un rechazo llega como mucho en unos segundos, mientras que un tiempo de espera agotado te hace esperar bastante más. Todos los códigos de esta pantalla los explicamos en No se puede acceder a este sitio web.

¿Cómo solucionarlo si eres visitante?

Recarga después de cada paso. Los dos primeros aclaran de quién es el problema.

  1. Revisa la dirección. Si escribiste https:// para un dispositivo que solo sirve http://, como un router o una impresora antiguos, el navegador llama al puerto 443, donde no escucha nada; usa la dirección que aparece en la etiqueta del dispositivo. Un número después de dos puntos debe coincidir con el puerto que el servicio usa de verdad, y un marcador antiguo puede conservar uno que el sitio ya abandonó. ¿Qué es el puerto 8080? explica estos números.
  2. Prueba el sitio en tu teléfono con el Wi-Fi desactivado. Si también se rechaza con datos móviles, el servidor del sitio se ha detenido o se está reiniciando, a menudo por mantenimiento. Espera; nada de lo que hagas en tu lado lo cambiará.
  3. Si solo falla el equipo, desactiva la VPN y recarga. Una VPN cambia la ruta y la dirección que ve el sitio, y su servidor o sus reglas pueden ser la causa.
  4. Pausa la protección web de tu software de seguridad para una prueba y vuelve a activarla después. La pista de Chrome «Comprobar el proxy y el cortafuegos» apunta aquí. Si el sitio se abre, añade una excepción para él en lugar de dejar la protección desactivada.
  5. Mira el archivo hosts. Este pequeño archivo de texto de Windows puede enviar el nombre de un sitio a una dirección fija, y algunos bloqueadores de anuncios y configuraciones de desarrollo antiguas envían sitios a 127.0.0.1, tu propio equipo. Abre C:\Windows\System32\drivers\etc\hosts con el Bloc de notas: las líneas que empiezan por # son notas, pero una línea con el nombre del sitio junto a 127.0.0.1 lo envía a tu equipo, donde nada lo sirve. Para editarlo necesitas permisos de administrador.

Los sitios grandes rara vez muestran este error. Están detrás de una CDN, una red de servidores que responde primero a los visitantes, así que un servidor que falla aparece como la página de error de la propia CDN; Cloudflare llama «error 521» al rechazo del servidor del sitio.

¿Puede un ajuste de proxy causar ERR_CONNECTION_REFUSED?

En Chrome, rara vez, y la pantalla te dice qué caso tienes. Un proxy es un servidor intermedio que reenvía tu tráfico. Cuando Chrome no puede llegar al proxy que tiene configurado, muestra otra página: «Sin conexión a Internet», «Se ha producido un error con el servidor proxy o la dirección es incorrecta.» y ERR_PROXY_CONNECTION_FAILED. Firefox dice «El servidor proxy está rechazando las conexiones».

Lo probamos en Chromium: un ajuste de proxy que apuntaba a un puerto cerrado de 127.0.0.1 dio ERR_PROXY_CONNECTION_FAILED, mientras que abrir ese mismo puerto directamente dio ERR_CONNECTION_REFUSED. Si ves la página del proxy y nunca configuraste uno, lo dejó un programa o una VPN antigua; Cómo quitar un proxy de Chrome y Windows te guía paso a paso. En programas y scripts, en cambio, un proxy que no está en marcha sí aparece como «connection refused», con la dirección del proxy; lo vemos en la sección sobre scrapers.

¿Por qué aparece en el teléfono?

Chrome en Android muestra la misma página y el mismo código; en iPhone, Safari lo dice a su manera. Situaciones frecuentes:

  1. Una dirección pensada para un equipo de escritorio. En un teléfono, localhost y 127.0.0.1 son el propio teléfono. Para probar un sitio que funciona en tu equipo, abre la dirección del equipo en la red de casa, como 192.168.1.20:5173, y arranca el servidor de desarrollo para que escuche en la red (Vite lo hace con --host). El firewall del equipo debe permitir la conexión.
  2. El emulador de Android. Allí, 127.0.0.1 es el teléfono emulado y tu equipo es 10.0.2.2, como indica la guía de redes del emulador de Android.
  3. Dispositivos de casa desde fuera. La página de un router o de una cámara solo funciona en el Wi-Fi de casa; con datos móviles obtienes un rechazo o un tiempo de espera agotado.
  4. Una VPN, un bloqueador de anuncios o una app de «seguridad» que filtra el tráfico del teléfono. Páusala y recarga.

Si el sitio o el servidor es tuyo: ¿por qué se rechaza a los visitantes?

Los visitantes reciben un rechazo cuando la máquina está encendida, pero ningún programa acepta conexiones en su puerto. Revisa en este orden:

  • El servidor web o la app no está en marcha. Se cerró por un fallo, no arrancó tras una actualización o se está reiniciando; sus registros dicen por qué.
  • Solo escucha en la dirección local. Un programa vinculado a 127.0.0.1 solo acepta conexiones de la misma máquina. Vincúlalo a la dirección pública o a 0.0.0.0 (todas las direcciones IPv4), o pon delante un servidor web público.
  • Falta HTTPS en el puerto 443. El sitio funciona con http://, pero los visitantes que piden https:// llaman a una puerta cerrada.
  • Una regla del firewall rechaza el puerto. Una regla de rechazo (reject) devuelve una respuesta, que los visitantes suelen ver como un rechazo; una regla de denegación (deny) descarta el tráfico en silencio, así que ven un tiempo de espera agotado. El firewall ufw de Ubuntu tiene los dos tipos.

La dirección de escucha es una sola línea en la mayoría de los programas. En Node.js:

js
// Solo esta máquina puede conectarse:
server.listen(3000, "127.0.0.1");

// Todas las direcciones IPv4 de la máquina aceptan conexiones:
server.listen(3000, "0.0.0.0");

¿Por qué localhost rechaza la conexión?

localhost es el nombre con el que tu equipo se refiere a sí mismo, con dos direcciones: 127.0.0.1 (IPv4) y ::1 (IPv6). Un rechazo significa que ningún programa escuchaba en ese puerto en la dirección que se probó.

  • El servidor de desarrollo no está en marcha. Se detuvo con un error o se cerró su terminal. Lee primero la salida de la terminal.
  • Funciona en otro puerto. Algunas herramientas pasan al siguiente puerto libre cuando el suyo está ocupado. Abre exactamente la dirección que imprimió el servidor.
  • IPv4 e IPv6 no coinciden. Un servidor puede escuchar solo en ::1 mientras un cliente prueba 127.0.0.1, o al revés. Los navegadores prueban las dos: en nuestra prueba con Chromium, un servidor en ::1 se abrió con localhost, pero se rechazó con 127.0.0.1. Desde la versión 17, Node.js puede resolver localhost primero como ::1, y hasta que las versiones 18.18 y 20 activaron autoSelectFamily por defecto (documentación del módulo net de Node.js, en inglés), probaba solo esa dirección y fallaba con connect ECONNREFUSED ::1:3000. Actualiza Node.js o escribe 127.0.0.1 en la URL del cliente.
  • Un puerto de Docker que nunca se publicó. El programa de un contenedor no es accesible desde fuera del host hasta que publicas su puerto: docker run -p 8080:80 une el puerto 8080 de tu equipo con el puerto 80 del contenedor (guía de publicación de puertos de Docker, en inglés). Dentro, el programa debe escuchar en 0.0.0.0; ahí 127.0.0.1 es el propio contenedor.

Nivel avanzado: ver con un comando qué dirección rechazó la conexión

Puedes saltarte esta sección. curl viene con Windows 10, Windows 11 y macOS (en PowerShell, escribe curl.exe), y -v muestra cada intento de conexión:

bash
curl -v http://localhost:3000/

Las líneas clave de nuestra prueba, sin nada en el puerto 3000 (curl 8.21.0, Windows 11):

text
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:3000...
*   Trying 127.0.0.1:3000...
* connect to ::1 port 3000 from :: port 54810 failed: Connection refused
* connect to 127.0.0.1 port 3000 from 0.0.0.0 port 54811 failed: Connection refused
curl: (7) Failed to connect to localhost:3000 after 2226 ms: Could not connect to server
  • Las dos direcciones rechazadas: nada escucha en ese puerto. Arranca el servidor o usa su puerto real.
  • Una rechazada y después «Established connection to localhost (127.0.0.1 port 3000)»: el servidor solo escucha en esa dirección, y los clientes que prueban solo la otra fallan.
  • curl espera e informa de un tiempo de espera agotado: algo descarta el tráfico, normalmente un firewall. Es otro error.

Si escribes un scraper o usas un proxy en tu código

En el código, el mensaje nombra la dirección que rechazó la conexión, así que te dice si fue el proxy o el destino quien dijo que no. Esto es lo que obtuvimos contra puertos cerrados (Windows escribe su mensaje en el idioma del sistema; este es el texto en inglés):

HerramientaQué muestra
Python en WindowsConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it
Python Requests 2.34, puerto de proxy cerradoProxyError: ... (Caused by ProxyError('Unable to connect to proxy', NewConnectionError(...)))
Node.js 24 fetchTypeError: fetch failed con [cause]: AggregateError [ECONNREFUSED]
curl 8.21, puerto de proxy cerradocurl: (7) Failed to connect to example.com:443 over proxy 127.0.0.1 after 2031 ms

En Linux, el mismo error de Python dice [Errno 111] Connection refused, el «errno 111» que busca mucha gente. La lista de códigos de error de Windows Sockets de Microsoft describe el 10061 como un intento de conexión a un servicio que no está en marcha en la otra máquina.

Las causas habituales:

  • Un puerto de proxy equivocado. Copia el host y el puerto del Generador de endpoints. Si usas Proxies HTTPS y SOCKS5 en la misma cuenta, cada protocolo tiene su propio puerto. Según el firewall del proveedor, un puerto equivocado se rechaza al instante o agota el tiempo de espera.
  • Una herramienta de proxy local que no está en marcha. Los proxies de depuración y los gestores de proxy locales escuchan en 127.0.0.1, a menudo en el puerto 8080; mientras están cerrados, rechazan todas las peticiones.
  • Una variable de entorno olvidada. Python Requests y curl leen HTTP_PROXY y HTTPS_PROXY, así que una variable antigua envía las peticiones a un proxy que ya no existe.

Este script muestra una variable olvidada y distingue un rechazo en el proxy de un fallo detrás de él. Si envías tus peticiones a través de los Proxies residenciales, pon en PROXY la dirección del gateway del Generador de endpoints:

python
import requests
from requests.utils import get_environ_proxies

PROXY = "http://user:pass@pr.proxynet.io:8000"  # host y puerto del Generador de endpoints
URL = "https://example.com/"

# Una variable HTTP_PROXY o HTTPS_PROXY olvidada es una causa oculta frecuente.
print("Proxy from environment variables:", get_environ_proxies(URL) or "none")

with requests.Session() as s:
    s.trust_env = False  # usa solo el proxy de abajo, nunca una variable olvidada
    s.proxies = {"http": PROXY, "https": PROXY}
    try:
        r = s.get(URL, timeout=15)
        print("Connected, HTTP status", r.status_code)
    except requests.exceptions.ProxyError as e:
        if "Tunnel connection failed" in str(e):
            print("The proxy answered but could not reach the site")
        else:
            print("The proxy refused the connection: check the host and the port")

Lo ejecutamos a través de un proxy de prueba local con autenticación user:pass (Requests 2.34.2, Python 3.13): con una variable HTTPS_PROXY olvidada, con un puerto de proxy equivocado y con un proxy que funciona y un puerto de destino cerrado:

text
Proxy from environment variables: {'https': 'http://127.0.0.1:8080'}
Connected, HTTP status 200
Proxy from environment variables: none
The proxy refused the connection: check the host and the port
Proxy from environment variables: none
The proxy answered but could not reach the site

En el tercer caso, el puerto del destino estaba cerrado. Revisa su dirección y su puerto, y no reintentes en un bucle sin pausas: un puerto cerrado sigue cerrado hasta que su propietario arranca el servicio. Vuelve a intentarlo más tarde, con pausas cada vez más largas.

Dónde puedes encontrártelo

  • La página de administración de un router, un NAS, una impresora o una cámara.
  • Un sitio web que estás construyendo, en localhost o en un teléfono.
  • Herramientas autoalojadas después de una actualización o un reinicio.
  • Herramientas de supervisión que comprueban un servicio mientras se reinicia.
  • Scripts con el puerto del proxy o el del destino equivocado.

Errores habituales

  • Borrar la caché, las cookies o el DNS. Nada de eso interviene.
  • Desactivar el firewall o el antivirus para siempre. Pausa una sola función para una prueba.
  • Tratar localhost y 127.0.0.1 como lo mismo en todas las herramientas. Un servidor puede escuchar solo en una de las dos.
  • Reintentar en un bucle sin pausas. Un puerto cerrado no se abre porque vuelvas a preguntar.
  • Reinstalar el navegador. Todos los navegadores reciben la misma respuesta del mismo servidor.

Guía de decisión

Tu situaciónQué hacer
Se rechaza en todos los dispositivos y redesEl servidor del sitio está caído; espera o avisa al propietario
Se abre en el teléfono, se rechaza en el equipoDesactiva la VPN, pausa la protección web, revisa el archivo hosts
Se rechaza la página de un router o una impresoraUsa el Wi-Fi de casa y la dirección de su etiqueta
La página dice «Sin conexión a Internet» y menciona el servidor proxyEs otro error: corrige o quita el ajuste de proxy
localhost rechaza la conexiónArranca el servidor de desarrollo y abre la dirección que imprime
Tu script dice «Unable to connect to proxy»Revisa el host y el puerto del proxy y las variables de entorno

Preguntas frecuentes

¿ERR_CONNECTION_REFUSED es culpa mía o del sitio web?

Prueba el sitio con datos móviles. Si también se rechaza ahí, el servidor del sitio no acepta conexiones y solo su propietario puede arreglarlo. Si se abre, revisa la VPN, el software de seguridad y el archivo hosts de tu equipo.

¿Por qué localhost rechaza la conexión?

Nada en tu equipo escucha en ese puerto en la dirección que se probó: el servidor de desarrollo no está en marcha, usa otro puerto o escucha en ::1 mientras el cliente prueba 127.0.0.1.

¿Qué significan errno 111 y WinError 10061?

Los dos son el número que da el sistema a una conexión rechazada: 111 en Linux, 10061 en Windows. Nada escucha en esa dirección y ese puerto.

¿Cómo soluciono ERR_CONNECTION_REFUSED en Android?

Comprueba que no abriste una dirección pensada para otro dispositivo, como localhost o el router de casa mientras usas datos móviles. Después pausa cualquier VPN o app de filtrado. Si falla en todas las redes, el problema es del sitio.

¿Una VPN o un proxy pueden causar ERR_CONNECTION_REFUSED?

Una VPN sí, así que prueba con ella desactivada. Un ajuste de proxy roto en Chrome muestra ERR_PROXY_CONNECTION_FAILED en su lugar.

¿Borrar la caché o vaciar el DNS lo soluciona?

No. La dirección del servidor se encontró y el navegador fue rechazado antes de que llegara ninguna página. La excepción es el archivo hosts, que puede enviar el nombre de un sitio a tu propio equipo.

En resumen

ERR_CONNECTION_REFUSED significa que la máquina del servidor respondió, pero nada escuchaba en ese puerto. Los visitantes revisan la dirección y prueban otra red; si se rechaza en todas partes, lo tiene que arreglar el sitio. Los propietarios buscan un servicio detenido, un programa vinculado a 127.0.0.1 o una regla de firewall que rechaza; los desarrolladores, un servidor de desarrollo detenido, un puerto equivocado o el desajuste con ::1. En el código, la dirección del mensaje muestra si rechazó el proxy o el destino. Qué tipos de proxy existen y para qué sirve cada uno lo cuenta nuestra página de proxies.