EMZETT.
Войти

ECONNRESET: connection reset by peer

Коротко: Другая сторона резко завершила TCP-соединение, пока вы отправляли или ожидали данные.

Подробнее: Сообщения: Error: read ECONNRESET (Node.js), Connection reset by peer (Linux), ERR_CONNECTION_RESET (Chrome). В отличие от connection refused (на порту никто не слушает) соединение сначала было установлено, а затем жёстко прервано (TCP RST).

Подробности

Возможные причины

  • Сервер падает или перезапускается.
  • Межсетевой экран, прокси или балансировщик нагрузки прерывает простаивающие или долгие соединения (тайм-аут простоя).
  • Сервер закрывает keep-alive-соединения, которые клиент ещё хочет использовать повторно.
  • Слишком большие запросы или нарушение лимитов.
  • Нестабильная сеть (Wi-Fi, VPN, мобильная) или ПО безопасности, блокирующее трафик TLS.
  • Сервер перегружен и сбрасывает соединения (очередь заполнена).
  • Неверная настройка TLS (неверная версия/шифры).

Решения

  1. Проверьте журналы сервера: сбой, память, перезапуски?
  2. Повторяйте с отсрочкой: отдельные сбросы в сети нормальны и должны перехватываться клиентом.
  3. Согласуйте тайм-ауты и настройки keep-alive клиента, сервера и посредников (тайм-аут клиента короче тайм-аута сервера).
  4. Не используйте соединения повторно бесконечно; при ошибке открывайте новое.
  5. Проверьте другую сеть, VPN/прокси/антивирус.
  6. Соберите подробности с помощью curl -v, openssl s_client или tcpdump.
  7. Проверьте нагрузку и лимиты соединений (например, ulimit -n).

Оценка

Картина «ошибка только иногда» указывает на тайм-ауты или пики нагрузки, «всегда» — на конфигурацию или межсетевой экран. В Node.js: задайте req.on('error', ...) и настройки Agent для keepAlive, не оставляйте ошибки необработанными, иначе процесс аварийно завершится.

См. также: ERR_CONNECTION_REFUSED, ERR_CONNECTION_TIMED_OUT, HTTP keep-alive