hostprofi.ru
Подобрать хостинг
Термин·буква C

Connection refused

краткое определение

Connection refused — ошибка сетевого соединения (ECONNREFUSED, errno 111): удалённый хост получил пакет SYN, но отправил TCP RST в ответ, что означает: хост доступен, но на указанном порту нет слушающего сервиса или соединение заблокировано.

Connection refused (ECONNREFUSED) — одна из наиболее частых сетевых ошибок на серверах. В отличие от timeout (хост недоступен или пакет отброшен), refused означает активный отказ: хост получил запрос и явно ответил, что порт закрыт. Клиент получает ответ мгновенно, без ожидания таймаута.

Как работает

TCP handshake при Connection refused:

  1. Клиент отправляет пакет SYN на IP:PORT.
  2. Если на порту нет слушающего сервиса — ОС немедленно отвечает TCP RST (Reset).
  3. Клиент получает ECONNREFUSED и немедленно завершает попытку подключения.

Если порт заблокирован файрволом с правилом DROP (не REJECT) — клиент получит timeout, а не refused.

Основные причины Connection refused:

  • Сервис не запущенNginx, MySQL, PostgreSQL, Redis не работают или аварийно завершились. Проверка: systemctl status nginx, ss -tlnp | grep 3306.
  • Сервис слушает на другом порту — например, MySQL настроен на 3307 вместо 3306. Проверка: ss -tlnp (Socket Statistics, замена устаревшего netstat).
  • Сервис привязан к localhost — MySQL с bind-address=127.0.0.1 не принимает внешние соединения. Попытка подключиться с другого сервера вызовет refused. Проверка: ss -tlnp | awk '$4 ~ /:3306/ {print}'.
  • Файрвол отклоняет соединение — правило REJECT (не DROP) в iptables или UFW. DROP даёт timeout, REJECT — refused.
  • Очередь соединений переполнена — при exceeding backlog (net.core.somaxconn) новые соединения отклоняются.

Диагностика: telnet host port, nc -zv host port, curl -v telnet://host:port. В Python: ConnectionRefusedError: [Errno 111] Connection refused. В Go: dial tcp: connect: connection refused.

История

TCP/IP стек и коды ошибок POSIX стандартизированы в RFC 793 (TCP, 1981) и POSIX.1 (1988). ECONNREFUSED — ошибка номер 111 в Linux, определена в /usr/include/asm-generic/errno.h. HTTP-код 502 Bad Gateway часто связан с connection refused от upstream-сервера к reverse proxy.

На что обращать внимание

При настройке Docker-контейнеров: сервис внутри контейнера слушает 0.0.0.0:8080, но не пробрасывает порт наружу — получите connection refused. При использовании Nginx как reverse proxy: ошибка 502 Bad Gateway может означать, что PHP-FPM или приложение вернули connection refused. Проверяйте логи Nginx (/var/log/nginx/error.log) — там будет указан upstream-адрес и errno.

Что означает ошибка Connection Refused

Connection refused (TCP RST) генерируется ядром операционной системы когда: порт закрыт (нет сервиса), iptables/firewall возвращает REJECT (а не DROP). Отличие от Connection Timeout: timeout — пакет отброшен без ответа (DROP в firewall), refused — немедленный отказ от ядра ОС. Код ошибки POSIX: ECONNREFUSED (111). HTTP: 502 Bad Gateway возникает когда Nginx получает Connection Refused от upstream (PHP-FPM, Node.js).

Диагностика Connection Refused

ss -tlnp | grep :3306    # проверить, слушает ли MySQL
nc -zv 127.0.0.1 3306    # тест TCP подключения
curl -v http://localhost  # тест HTTP
journalctl -u mysql -n50  # логи MySQL
systemctl status php-fpm  # статус PHP-FPM

Причины Connection Refused на хостинге

ОшибкаПричинаРешение
502 Bad GatewayPHP-FPM не запущенsystemctl start php-fpm
Connection refused к MySQLсервис упал или не слушаетпроверить bind-address в my.cnf
SMTP Connection refusedPostfix не запущенsystemctl start postfix
Redis Connection refusedRedis упал / неверный портпроверить redis-cli ping

Типичные ошибки

  • MySQL слушает только на 127.0.0.1 (bind-address): удалённое подключение невозможно.
  • PHP-FPM socket vs TCP port: Nginx настроен на TCP (fastcgi_pass 127.0.0.1:9000), FPM слушает на Unix socket.
  • Docker: сервис в контейнере слушает на 0.0.0.0:3306 внутри, но порт не опубликован наружу без -p 3306:3306.

Другие термины