Главная
|
Услуги и цены
VDS
Выделенные серверы
Размещение сервера
|
F.A.Q
|
О компании
|

Ошибка «Connection refused» при подключении к сервису. Почему возникает и как исправить

Ошибка Connection refused означает, что соединение было отклонено сразу после попытки подключения. Это одна из частых проблем, с которой сталкиваются владельцы VDS, разработчики и системные администраторы. Она может появиться при подключении к Nginx, PostgreSQL, Redis, MySQL, SSH, Docker-контейнерам и практически любому сетевому сервису.

В этой статье разберем, почему появляется Connection refused, как быстро определить источник проблемы и какие команды действительно помогают найти неисправность.

  • Что означает ошибка Connection refused
  • С чего начать
  • Причина №1. Сервис не запущен
  • Причина №2. Сервис слушает другой порт
  • Причина №8. Приложение запущено в Docker
  • Как проверить доступность порта
  • Где искать информацию
  • Чек-лист диагностики
  • Заключение

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

Когда одна программа пытается подключиться к другой, она обращается к определенному IP-адресу и порту. Например когда вы подключаетесь к серверу по SSH на порт 22.

Если в этот момент никто не слушает указанный порт, операционная система сразу возвращает ошибку:

Connection refused

Сервер ответил мгновенно и сообщил, что принимать подключение просто некому.

Поэтому Connection refused и Connection timed out это разные ошибки. Во втором случае соединение пытается установиться, но ответа нет. В первом ответ приходит сразу, но отрицательный.

С чего начать

Можно проверить несколько вещей в одном и том же порядке:

  1. Работает ли нужная служба.
  2. Слушает ли она правильный порт.
  3. Правильно ли указан адрес подключения.
  4. Разрешены ли подключения в настройках сервиса.
  5. Не блокирует ли соединение firewall.
  6. Не используется ли неправильный сокет.

Причина №1. Сервис не запущен

Это самая распространенная причина появления ошибки.

Например, после перезагрузки сервера PostgreSQL не стартовал, Redis завершился с ошибкой или Gunicorn не смог загрузить приложение.

Проверка состояния службы на сервере

Проверьте состояние службы. Для PostgreSQL:

sudo systemctl status postgresql

Для Redis:

sudo systemctl status redis

Для Nginx:

sudo systemctl status nginx
Статус службы PostgreSQL или Redis

Если служба остановлена, попробуйте ее запустить.

sudo systemctl start postgresql

или

sudo systemctl restart redis

После запуска повторите попытку подключения.

Перезапуск службы на сервере

Если сервис снова сразу завершается, не пытайтесь бесконечно выполнять restart. Намного полезнее сразу открыть журнал службы и посмотреть, что именно помешало запуску.

Причина №2. Сервис слушает другой порт

Иногда служба работает совершенно нормально, но использует другой порт.

Например, приложение ожидает PostgreSQL на 5432, а база данных настроена на 5433.

Проверка портов с помощью команды ss

Посмотреть открытые порты можно командой:

ss -tlnp

Например:

LISTEN 0      244    127.0.0.1:5432
LISTEN 0      511      0.0.0.0:80
LISTEN 0      511      0.0.0.0:443
Открытые порты на сервере

Если нужного порта нет, значит сервис либо не запущен, либо слушает другой адрес.

Проверка прослушиваемого порта

Команда ss позволяет за несколько секунд понять, действительно ли служба ожидает входящие подключения.

Причина №8. Приложение запущено в Docker

При работе с Docker ошибка встречается особенно часто.

Контейнер может работать, но нужный порт не опубликован наружу.

Проверьте список контейнеров.

docker ps

Убедитесь, что порт действительно проброшен.

Например:

0.0.0.0:5432->5432/tcp
Проверка опубликованных портов Docker-контейнера

Если публикации нет, подключиться извне не получится независимо от состояния самого приложения.

docker run --name nginx nginx
docker run -d --name nginx2 -p 80:80 nginx
Запуск Docker-контейнера с публикацией порта

Как проверить доступность порта

Иногда достаточно выполнить одну команду.

Например:

nc -zv 127.0.0.1 5432

или

telnet 127.0.0.1 5432

Если соединение установилось, значит сервис принимает подключения.

Если сразу появляется Connection refused, проблема находится на стороне сервера или самого приложения.

Где искать информацию

Если служба не запускается или сразу завершает работу, первым делом откройте журнал.

Например:

journalctl -u postgresql -n 100

или

journalctl -u redis -n 100

Для Nginx:

journalctl -u nginx -n 100

Также полезно посмотреть системный журнал.

journalctl -xe

Чек-лист диагностики

Если нужно быстро найти источник проблемы, выполните несколько команд подряд.

systemctl status postgresql
ss -tlnp
journalctl -u postgresql -n 50
nc -zv 127.0.0.1 5432
sudo ufw status

Для большинства сервисов достаточно заменить название службы и номер порта. Такой набор команд позволяет проверить состояние сервиса, наличие открытого порта, журнал ошибок и сетевую доступность буквально за пару минут.

Заключение

Ошибка Connection refused означает, что подключение было отклонено сразу, потому что на указанном адресе и порту никто не принимает соединения. Чаще всего проблема связана с остановленной службой, неправильным портом, ошибкой в адресе подключения или настройками прослушивания.

logo
© 2022 62yun
Все права защищены
vk.com/62yuncom
support@62yun.ru
logo
vk.com/62yuncom
support@62yun.ru
Услуги
VDS Выделенные серверы
Полезное
F.A.Q О компании Политика конфиденциальности Оферта
Способы оплаты
wechatpay visa mastercard
MirAccept
Партнеры
25port
© 2022 62yun Все права защищены
ВВЕРХ