ECONNRESET і ECONNREFUSED: з'єднання скинуто або відхилено
Це системні помилки з'єднання, які показують Node.js і багато інших програм. Одна означає, що з'єднання обірвали, друга — що його не прийняли.
Оновлено · Редакція Prokso
- ECONNREFUSED означає, що з'єднання не прийняли, а ECONNRESET означає, що його обірвали
- ECONNREFUSED майже завжди стосується підключення до проксі: неправильний хост або порт
- Скопіюйте рядок проксі з особистого кабінету заново й перевірте хост gw.prokso.com і порт
Що означає помилка
За документацією Node.js, ECONNREFUSED (Connection refused) означає, що з'єднання не вдалося, бо цільова машина активно відмовила. Зазвичай так буває, коли на віддаленому хості за цим портом не працює служба.
ECONNRESET (Connection reset by peer) означає, що інша сторона примусово закрила з'єднання. Документація пояснює це втратою з'єднання на віддаленому боці через тайм-аут або перезавантаження; найчастіше помилка трапляється в модулях http і net.
Через проксі ваша програма з'єднується з проксі, а не із сайтом. Тому ECONNREFUSED майже завжди стосується підключення до самого проксі: якщо сайт відмовить, проксі повідомить про це власною відповіддю, наприклад кодом 502.
Причини
- Неправильний хост або порт проксі. Для ECONNREFUSED: порт поза 823, 824 і 10000–20000 або помилка в імені хоста.
- Програма не використовує проксі. Налаштування проксі не застосувалися, і програма йде на інший хост, де ніхто не слухає порт.
- Обрив з'єднання з вихідним пристроєм. Для ECONNRESET: резидентська чи мобільна адреса пішла з мережі, і порт фіксованого IP отримав новий IP.
- Сайт закрив з'єднання. Сайт обриває з'єднання на свій розсуд, наприклад для запитів понад ліміт.
- Повторне використання закритого з'єднання. Програма надсилає запит у з'єднання keep-alive, яке інша сторона вже закрила.
Як виправити
- Для ECONNREFUSED скопіюйте рядок проксі з кабінету заново й перевірте хост gw.prokso.com і порт.
- Переконайтеся, що програма справді йде через проксі: виведіть у журнал адресу, до якої вона з'єднується. Приклад налаштування — в інструкції Node.js.
- Для ECONNRESET додайте в програму повтор запиту з паузою: на портах ротації повтор піде через новий IP.
- Знизьте кількість паралельних потоків і темп запитів до одного сайту.
- Якщо ECONNRESET приходить на довгих завданнях з фіксованим IP, врахуйте, що тривалість сесії обмежена — від 1 до 120 хвилин за налаштуваннями порту.
Як перевірити, що все запрацювало
Вставте рядок у перевірку проксі. Якщо з'єднання проходить, хост і порт правильні, і причину треба шукати в налаштуваннях програми або в поведінці сайту.
Діагностика за 2 хвилини
Спершу вставте рядок у перевірку проксі. Якщо там проксі працює, причина в програмі чи її налаштуваннях. Якщо ні — перевірте рядок з терміналу:
curl -v -x "http://ЛОГІН:ПАРОЛЬ@gw.prokso.com:823" https://api.ipify.org
- Рядок
< HTTP/1.1 407одразу післяCONNECT— відповідає проксі. Назва після коду, наприкладNO_USER, підказує причину. - Проксі відповів на
CONNECTкодом 200, а далі прийшов інший код — проксі працює, цю відповідь дав сайт. - Жодної відповіді, лише тайм-аут — з'єднання не дійшло до проксі: перевірте хост, порт і мережу.
Інструкції, де трапляється ця помилка
Питання й відповіді
Що робити, якщо ECONNREFUSED з'являється одразу на старті?
Найімовірніше, програма підключається не туди: хибний порт, хост або проксі не застосувався. Перевірте рядок і налаштування програми, а потім <a href="/errors/err-proxy-connection-failed">помилку підключення до проксі</a>.
Чи винен проксі в ECONNRESET?
Не обов'язково. Скинути з'єднання може сайт, вихідний пристрій або ваша мережа. Якщо помилка суцільна на всіх сайтах, напишіть у підтримку з часом і назвою плану.
Чим ECONNRESET відрізняється від ETIMEDOUT?
ECONNRESET — з'єднання обірвали явно. ETIMEDOUT — інша сторона не відповіла вчасно. Про тайм-аути — на сторінці <a href="/errors/proxy-timeout">тайм-аут проксі</a>.
Інші помилки проксі
Резидентські $1.59, мобільні $2.50, серверні $0.65 за 1 ГБ
Реєстрація за хвилину, доступи одразу після оплати.