Битлента
Ошибки и коды3 мин чтения·

curl (7): Failed to connect to host — как найти причину

Ошибка curl (7) Failed to connect: соединение установить не удалось. Порт, служба, межсетевой экран, промежуточный сервер, IPv6. Проверка по шагам.

Что означает код 7

Сообщение «curl: (7) Failed to connect to host port N: Connection refused» либо «Couldn't connect to server» говорит, что имя разрешено и адрес получен, но установить соединение по нему не удалось. Формулировка может отличаться, но суть одна: TCP-соединение не состоялось.

В этом коде важно то, как именно оно не состоялось. «Connection refused» означает, что на адресе кто-то ответил отказом: порт закрыт или служба не слушает. Отсутствие ответа приведёт к другой ошибке, о таймауте.

Иногда та же ошибка выводится в форме «Failed to connect to localhost port 8080: Connection refused». Это типичный признак того, что локальная служба не запущена: запустите её и повторите запрос.

Причины по убыванию вероятности: curl (7)

Чаще всего служба на сервере не запущена или слушает другой порт. Второе — неверный адрес или порт в команде: например, обращение к порту 80, когда служба работает на 8080. Третье — межсетевой экран, который отклоняет соединения.

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

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

Проверка по шагам: curl (7)

Внимательно прочитайте, к какому адресу и порту curl пытался подключиться: они указаны в сообщении. Убедитесь, что это именно то, что вы хотите. Затем проверьте, отвечает ли адрес на ping, хотя его отсутствие ещё не значит проблемы: ping бывает закрыт.

Проверьте порт другой утилитой, например nc или telnet. Если соединение не устанавливается и там, проблема не в curl. Если служба на вашей машине, проверьте, слушает ли она нужный порт, и на каком адресе: слушание только на localhost не позволит подключиться снаружи.

Если вы обращаетесь по имени, а не по IP, проверьте, какой именно адрес получен при разрешении: он мог устареть, и запросы уходят на сервер, где служба давно остановлена. Сравните адрес из DNS с реальным адресом сервера.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Что исправить на стороне сервера

Запустите службу и проверьте её журнал: она могла упасть при старте из-за ошибки конфигурации. Убедитесь, что она слушает нужный адрес, а не только локальный. Проверьте правила межсетевого экрана и группы безопасности облака: нужный порт должен быть разрешён. Если сервис в контейнере, проверьте проброс портов.

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

В облачных средах помимо правил межсетевого экрана на самой машине действуют внешние группы безопасности и списки доступа. Проверьте оба уровня: правило на одном из них не отменяет запрет на другом.

Что исправить на стороне клиента

Проверьте переменные окружения с промежуточного сервера: если промежуточный сервер указан и недоступен, curl пытается подключиться к нему, а не к целевому серверу. Отключите промежуточный сервер для проверки. Если имя резолвится в IPv6, попробуйте принудительно использовать IPv4 либо укажите конкретный адрес.

Проверьте локальный межсетевой экран и защитные программы, ограничивающие исходящие соединения. Учтите, что в корпоративных сетях исходящие соединения на нестандартные порты могут быть ограничены политикой.

Как отличить от таймаута

Если ошибка приходит мгновенно, вероятно, порт закрыт и хост его явно отклонил. Если curl долго ждёт и затем сообщает о неудаче, пакеты не доходят, и вы столкнулись с таймаутом либо молчаливым отбрасыванием пакетов межсетевым экраном. Эта разница подсказывает, где искать: быстрое отклонение — служба или порт, долгое ожидание — маршрут или фильтрация.

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

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
curltcpпортыошибки

Часто задаваемые вопросы

Читайте также