Error: socket hang up в axios через проксі

З'єднання закрилося раніше, ніж прийшла відповідь. Через проксі причина найчастіше в тому, як axios передає HTTPS-запит, або в парі «порт — протокол».

Оновлено · Редакція Prokso

Коротко
  • socket hang up означає, що з'єднання закрилося раніше, ніж прийшла відповідь
  • Старі версії axios надсилали HTTPS-запит проксі без тунелю CONNECT, і проксі рвав з'єднання
  • Надійний варіант — https-proxy-agent чи socks-proxy-agent разом із proxy: false і правильною парою порту й протоколу

Що означає помилка

За документацією Node.js, коли з'єднання закривається до отримання відповіді, запит завершується помилкою з текстом Error: socket hang up і кодом ECONNRESET. axios працює в Node.js поверх модулів http і https, тому показує ту саму помилку.

Через проксі важливо, як клієнт передає запит на HTTPS-адресу. Правильно — спочатку попросити проксі відкрити тунель методом CONNECT, а вже в тунелі встановити TLS із сайтом. У звіті axios #4531 (версія 0.26.1) вбудована опція proxy надсилала HTTPS-запит проксі без CONNECT, проксі розривав з'єднання, і програма отримувала socket hang up.

У changelog axios 1.16.1 (травень 2026) записано виправлення #10858, а README гілки 1.x описує нову поведінку: для адрес https:// axios відкриває тунель CONNECT і шифрує з'єднання із сайтом наскрізно. Тому на старих версіях помилку частіше лікує заміна способу підключення, а на нових — перевірка порту й протоколу.

Причини

  • Стара версія axios. Вбудована опція proxy не відкриває тунель CONNECT для HTTPS-адрес, і проксі закриває з'єднання.
  • Протокол не відповідає порту. Порт 823 приймає HTTP, порт 824 — SOCKS5. HTTP-запит на порт 824 проксі не розбирає й обриває з'єднання.
  • protocol: 'https' для HTTP-порту. За README axios ставити https у налаштуваннях проксі треба лише тоді, коли сам проксі-сервер працює через HTTPS. Інакше рукостискання TLS іде на звичайний HTTP-порт.
  • Агент і опція proxy разом. Якщо передано свій агент, а в системі задано http_proxy чи https_proxy, axios може додати ще й проксі зі змінних середовища.
  • Обрив на боці сайту або пристрою. Сайт закрив з'єднання, або фіксований IP змінився, бо пристрій вийшов із мережі.

Як виправити

  1. Перевірте версію командою npm ls axios. Якщо вона старіша за 1.16.1, оновіть axios або підключіть проксі через агент, як у наступному кроці.
  2. Для HTTP-проксі створіть агент new HttpsProxyAgent('http://ЛОГІН:ПАРОЛЬ@gw.prokso.com:823') із пакета https-proxy-agent, передайте його як httpsAgent і додайте proxy: false. За README axios тоді залишає тунель агенту, а proxy: false вимикає проксі зі змінних середовища.
  3. Для SOCKS5 використайте пакет socks-proxy-agent: new SocksProxyAgent('socks5h://ЛОГІН:ПАРОЛЬ@gw.prokso.com:824') передайте і як httpAgent, і як httpsAgent, теж із proxy: false.
  4. Якщо лишаєте вбудовану опцію proxy, вкажіть protocol: 'http', хост gw.prokso.com і порт 823 або порт із діапазону 10000–20000 для фіксованого IP. Повний приклад — в інструкції Node.js.
  5. Якщо помилка рідкісна і з'являється посеред роботи, додайте повтор запиту з паузою. Про обриви з'єднання докладніше — на сторінці ECONNRESET і ECONNREFUSED.

Як перевірити, що все запрацювало

Спочатку перевірте сам рядок у перевірці проксі. Потім зробіть з axios запит на https://prokso.com/ip: у відповіді має бути JSON з IP і країною проксі, а не вашою адресою. Якщо помилка лишається, пройдіть перевірку за кроками.

Діагностика за 2 хвилини

Спершу вставте рядок у перевірку проксі. Якщо там проксі працює, причина в програмі чи її налаштуваннях. Якщо ні — перевірте рядок з терміналу:

curl -v -x "http://ЛОГІН:ПАРОЛЬ@gw.prokso.com:823" https://api.ipify.org
  • Рядок < HTTP/1.1 407 одразу після CONNECT — відповідає проксі. Назва після коду, наприклад NO_USER, підказує причину.
  • Проксі відповів на CONNECT кодом 200, а далі прийшов інший код — проксі працює, цю відповідь дав сайт.
  • Жодної відповіді, лише тайм-аут — з'єднання не дійшло до проксі: перевірте хост, порт і мережу.

Інструкції, де трапляється ця помилка

Питання й відповіді

Чому curl працює, а axios — ні?

curl для HTTPS-адрес відкриває тунель CONNECT. Стара версія axios із вбудованою опцією proxy цього не робила, тому той самий проксі працює в curl і рве з'єднання в axios.

Чи обов'язково писати proxy: false разом з агентом?

Так, якщо в системі можуть бути змінні http_proxy чи https_proxy. README axios каже, що свої агенти без proxyEnv усе одно проходять обробку проксі зі змінних середовища, а proxy: false її вимикає.

Чи підтримує опція proxy в axios SOCKS5?

У README опція описана для HTTP- і HTTPS-проксі. Для SOCKS5 підключайте socks-proxy-agent як агент.

Замість socket hang up прийшов код 407. Що це?

Проксі отримав запит, але не прийняв логін чи пароль. Див. <a href="/errors/407-proxy-authentication-required">помилку 407</a>.

Резидентські $1.59, мобільні $2.50, серверні $0.65 за 1 ГБ

Реєстрація за хвилину, доступи одразу після оплати.

Створити акаунт