← 中文资源

简体中文版本

Node.js 出站请求报 ETIMEDOUT 或 socket hang up

通过区分网络可达性、防火墙丢包与客户端缺少超时,诊断 ETIMEDOUT。

阅读英文原文

症状

请求在长时间等待后以 ETIMEDOUT 或 socket hang up 失败,这与立刻失败的 ECONNREFUSED 不同。延迟本身是信号:客户端发出了数据包却没有回音,说明被防火墙或路由丢弃。由于许多 HTTP 客户端默认不设超时,调用可能挂起远超任何用户可忍受的时间。

诊断

用 ping 与 nc -vz 分别测 ICMP 与 TCP 端口;为请求显式设置短超时快速暴露问题;检查安全组与路由表。

ping -c 2 10.0.0.5 ; nc -vz 10.0.0.5 443

根因

到目标的数据包被丢弃而非拒绝,客户端一直等到超时。原因是网络可达性、防火墙策略或对端过载,再加上客户端缺少超时。

修复

开放所需端口与路由;确保目标服务接受连接;始终设置连接与请求超时,使失败快速且可操作。

验证

重试请求确认在超时内连接成功,并确认防火墙规则已允许来自客户端子网的流量。

常见陷阱

对非幂等请求无脑加重试会重复写入;只在可安全重放的操作上重试。