如何解决AWS中EC2间调用REST API出现的Socket Hang up 404问题
EC2跨服务器调用REST API出现Socket Hang up 404错误的排查方案
确认API端点准确性
- 核对请求的URL路径、HTTP方法(GET/POST等)是否和目标API定义完全一致,注意拼写错误、大小写差异(部分框架路由区分大小写)
- 在目标EC2本地用
curl直接测试API,比如curl -X GET http://localhost:端口/完整路径,验证API本身是否能正常响应,排除服务自身的404问题
检查目标端口监听状态
- 在目标服务器执行
netstat -tulpn | grep 端口号或ss -tulpn | grep 端口号,确认API服务正在监听指定端口,且绑定的是0.0.0.0(允许所有IP访问)而非仅127.0.0.1(仅本地访问)
- 在目标服务器执行
验证安全组与网络ACL配置
- 源EC2安全组:确保已允许出站访问目标EC2的API端口(如TCP 8080)
- 目标EC2安全组:确认已放行源EC2的IP或安全组ID对API端口的入站访问
- 网络ACL:检查入站、出站规则,因为网络ACL是无状态的,入站允许的端口流量,出站也要对应开放
排查请求超时与资源限制
- Socket Hang up可能是目标API处理请求超时导致连接被关闭,查看目标API的日志,检查是否有请求处理缓慢、CPU/内存耗尽的情况
- 调整源服务器请求客户端的超时设置,比如Node.js的axios可以设置
timeout: 30000(30秒),避免因超时时间过短触发断开
检查目标API服务状态
- 查看目标API的日志文件(如应用日志、反向代理日志),找到404错误的具体记录,确认是路由未匹配还是资源不存在
- 重启目标API服务,排除服务运行异常导致的路由失效问题
验证IP/域名解析
- 如果调用用的是域名,在源EC2上执行
nslookup 域名或dig 域名,确认解析结果是目标EC2的正确私有IP(同VPC内优先用私有IP) - 尝试直接用目标EC2的私有IP调用API,排除域名解析错误的影响
- 如果调用用的是域名,在源EC2上执行
内容的提问来源于stack exchange,提问作者Sampath Kumar kallem
相关产品推荐
相关产品推荐

