TL;DR« Ce site a refusé de se connecter » : Chrome vient d'afficher ERR_CONNECTION_REFUSED. Bonne nouvelle, l'erreur est franche : la machine visée a répondu, et elle a dit non. Reste à savoir pourquoi, et la réponse tient presque toujours en une question : quelque chose écoute-t-il sur ce port ?

Ce que dit vraiment ERR_CONNECTION_REFUSED#

Avant de charger une page, votre navigateur ouvre une connexion TCP : il envoie un paquet SYN, attend un SYN-ACK, puis confirme. La liste officielle des erreurs réseau de Chromium définit ERR_CONNECTION_REFUSED (code -102) comme « une tentative de connexion a été refusée ». Concrètement, la spécification TCP (RFC 9293) prévoit qu'une machine recevant un segment pour une connexion inexistante réponde par un paquet RST (reset). Sous Linux, la page de manuel de connect(2) traduit ce cas par ECONNREFUSED : aucun processus n'écoute sur l'adresse distante.

Deux enseignements utiles :

  • l'erreur apparaît presque instantanément, sans longue attente ;
  • elle prouve que le chemin réseau fonctionne : quelqu'un vous a répondu. Le problème est donc au bout du chemin, pas en route.

Les causes les plus fréquentes#

  • Le service est arrêté ou a planté : nginx, Apache, l'application Node ou PHP-FPM ne tourne plus.
  • Mauvais port : l'URL vise un port (:8080, :3000) où rien n'écoute, ou vous utilisez http:// alors que seul le HTTPS est ouvert.
  • Écoute restreinte : le service n'écoute que sur 127.0.0.1 et refuse donc toute connexion venue de l'extérieur.
  • Rejet actif par un pare-feu : une règle de type REJECT renvoie un RST ou un message ICMP même si le service est bien en écoute.
  • Conteneur sans port publié : le service tourne dans Docker mais le port n'est pas exposé sur l'hôte.
  • Proxy, VPN ou antivirus côté visiteur qui rejettent la connexion sortante.

Diagnostic côté visiteur#

  1. Changez de réseau. Passez en 4G/5G depuis votre téléphone. Si le site s'ouvre, le souci vient de votre poste ou de votre réseau local.
  2. Relisez l'URL. Vérifiez le port éventuel et le protocole : un http:// vers un serveur qui n'écoute qu'en HTTPS suffit à provoquer un refus.
  3. Contrôlez proxy et VPN. Désactivez-les temporairement et regardez aussi les paramètres proxy du système.
  4. Inspectez le fichier hosts. Une ligne oubliée (C:\Windows\System32\drivers\etc\hosts sous Windows, /etc/hosts sous Linux et macOS) peut envoyer le domaine vers une machine où rien n'écoute.
  5. Videz le cache DNS. Sous Windows, ipconfig /flushdns ; sous macOS, sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder ; sous Linux avec systemd-resolved, resolvectl flush-caches. Le rôle du DNS est détaillé dans notre article sur le choix d'un serveur DNS.
  6. Suspendez antivirus et pare-feu logiciel quelques minutes, puis réactivez-les.

Diagnostic côté administrateur#

1. Le service écoute-t-il, et où ?#

sudo ss -tlnp

D'après la page de manuel de ss, -t affiche les sockets TCP, -l ceux en écoute, -n évite la résolution des noms et -p indique le processus. Cherchez votre port : 0.0.0.0:80 ou *:80 signifie « toutes les interfaces IPv4 », 127.0.0.1:80 « local uniquement », [::]:80 concerne IPv6. Ligne absente : le service n'est pas démarré, vous tenez la cause.

2. Reproduire la connexion#

curl -v --connect-timeout 10 https://exemple.fr/
nc -vz exemple.fr 443

Le code de sortie 7 de curl correspond à un échec de connexion, typiquement un refus, alors que le 28 indique un dépassement de délai. Avec nc, le message « Connection refused » confirme un RST.

3. Le service lui-même#

Vérifiez son état avec systemctl status nginx ou systemctl status apache2, puis testez la configuration avant tout rechargement (sudo nginx -t ou sudo apachectl configtest). La documentation nginx indique que la directive listen vaut par défaut *:80 lorsque nginx tourne avec les privilèges superutilisateur, et qu'une adresse comme listen 127.0.0.1:8000; limite l'écoute à la boucle locale. Côté Apache, un Listen sans adresse écoute sur toutes les adresses de la machine, tandis qu'un Listen avec IP restreint l'écoute à cette interface.

Si le service refuse de démarrer, un port déjà occupé est une cause classique : Apache signale alors « Address already in use », et ss -tlnp révèle le processus fautif. Pensez aussi à activer le service au démarrage (systemctl enable) pour qu'un redémarrage de la machine ne le laisse pas éteint.

4. Le pare-feu#

Sur Ubuntu, ufw bloque les connexions entrantes par défaut sauf autorisation explicite :

sudo ufw status numbered
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Avec firewalld, sudo firewall-cmd --list-all montre la zone active ; avec iptables, sudo iptables -L -n -v liste les règles. Un service qui écoute mais reste refusé de l'extérieur pointe vers une règle REJECT.

Quatre scénarios types#

Ces situations courantes sont des illustrations, pas des retours d'expérience chiffrés.

« localhost a refusé de se connecter »#

Vous ouvrez http://localhost:3000 et Chrome affiche un refus. Le serveur de développement n'est pas lancé, s'est arrêté sur une erreur ou écoute sur un autre port. ss -tlnp | grep 3000 (ou netstat -ano | findstr :3000 sous Windows) ne renvoie rien : relisez la sortie du terminal pour repérer le port réel.

Conteneur Docker inaccessible#

Le conteneur tourne mais le navigateur reçoit un refus. La documentation Docker rappelle que les ports non publiés ne sont pas accessibles depuis l'extérieur de l'hôte, avec la syntaxe -p HÔTE:CONTENEUR. Contrôlez la colonne des ports de docker ps, et relancez avec docker run -p 8080:80 nom-image au besoin. Un port publié avec -p 127.0.0.1:8080:80 n'est joignable que depuis l'hôte.

Après un redémarrage du serveur#

Le site fonctionnait avant la maintenance, il refuse maintenant toute connexion. Le service n'a pas redémarré seul : systemctl status le confirme, systemctl enable --now le relance et le rend durable.

Le site marche en local mais pas depuis l'extérieur#

ss -tlnp montre 127.0.0.1:80 au lieu de 0.0.0.0:80 : corrigez la directive d'écoute, testez la configuration, puis rechargez.

Et si ce n'est pas un refus ?#

Si l'échec arrive après une longue attente, vous avez plutôt affaire à un silence réseau : passez à notre guide sur ERR_CONNECTION_TIMED_OUT. Si la page commence à se charger puis se coupe, consultez ERR_CONNECTION_CLOSED.

Prévenir plutôt que subir#

Supervisez l'ouverture des ports 80 et 443 depuis l'extérieur, et pas seulement depuis le serveur ; activez vos services au démarrage ; testez chaque configuration avant rechargement ; documentez vos règles de pare-feu. Si vous préférez déléguer cette surveillance, l'équipe de Websource, à Aix-en-Provence, propose de l'hébergement et de l'infogérance de serveurs.

Questions fréquentes#

Que signifie ERR_CONNECTION_REFUSED ?#

Le navigateur a bien atteint la machine, mais celle-ci a refusé la connexion : aucun service n'écoute sur ce port, ou un pare-feu rejette activement la demande. Contrairement à un timeout, la réponse est immédiate.

Que veut dire « localhost a refusé de se connecter » ?#

C'est l'affichage français de ERR_CONNECTION_REFUSED sur votre propre machine. Le serveur de développement n'est pas démarré, s'est arrêté sur une erreur ou écoute sur un autre port. Vérifiez avec ss -tlnp (Linux) ou netstat -ano (Windows).

ERR_CONNECTION_REFUSED vient-il de mon ordinateur ou du site ?#

Testez le site depuis un autre réseau, par exemple la 4G. S'il s'ouvre, le problème est local (proxy, VPN, hosts, antivirus). S'il échoue partout, il vient du serveur : service arrêté, mauvais port ou pare-feu.

Comment corriger ERR_CONNECTION_REFUSED sur mon serveur ?#

Vérifiez que le service tourne (systemctl status), qu'il écoute sur la bonne adresse (ss -tlnp doit montrer 0.0.0.0 ou [::] pour un accès extérieur) et que le pare-feu autorise le port. Testez ensuite avec curl -v depuis l'extérieur.

Quelle différence avec ERR_CONNECTION_TIMED_OUT ?#

Avec REFUSED, la machine répond immédiatement par un refus. Avec TIMED_OUT, aucune réponse ne revient et l'échec survient après une longue attente. Les deux causes et les deux corrections sont différentes.

Article rédigé le 29/09/2026 par l'équipe Websource à partir des sources citées ci-dessus, puis relu avant publication. Une information vous semble inexacte ou datée ? Signalez-le nous, nous corrigeons.