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 (неверная версия/шифры).
Решения
- Проверьте журналы сервера: сбой, память, перезапуски?
- Повторяйте с отсрочкой: отдельные сбросы в сети нормальны и должны перехватываться клиентом.
- Согласуйте тайм-ауты и настройки keep-alive клиента, сервера и посредников (тайм-аут клиента короче тайм-аута сервера).
- Не используйте соединения повторно бесконечно; при ошибке открывайте новое.
- Проверьте другую сеть, VPN/прокси/антивирус.
- Соберите подробности с помощью
curl -v,openssl s_clientилиtcpdump. - Проверьте нагрузку и лимиты соединений (например,
ulimit -n).
Оценка
Картина «ошибка только иногда» указывает на тайм-ауты или пики нагрузки, «всегда» — на конфигурацию или межсетевой экран. В Node.js: задайте req.on('error', ...) и настройки Agent для keepAlive, не оставляйте ошибки необработанными, иначе процесс аварийно завершится.
См. также: ERR_CONNECTION_REFUSED, ERR_CONNECTION_TIMED_OUT, HTTP keep-alive