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