You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向EC2实例发送POST请求?解决请求超时与连接拒绝问题

EC2上Node.js API请求超时/连接拒绝问题排查

问题背景

在Ubuntu系统的EC2实例部署了Node.js编写的简易API,已安装Node.js。API功能是接收POSTMAN的JSON POST请求,提取数据存入Mongo Atlas。但请求时遇到以下问题:

  • 用EC2私有IP请求:会话超时
  • 用公网域名格式https://ec2-xxxx-xxxx-xxxx-xxxx.us-east-2.compute.amazonaws.com:3001/products请求:同样超时
  • 用错误格式xxxx.xxxx.xxxx.xxxx/3001/products请求:connect ECONNREFUSED

服务器代码

const http = require('http'); 
const app=require('./app.js');
const port=process.env.PORT || 3001;
const server=http.createServer(app);
server.listen(port);

排查与解决步骤

1. 修正URL格式

错误格式xxxx.xxxx.xxxx.xxxx/3001/products缺少端口号前缀:,且你的API基于http模块创建,并非HTTPS,正确请求格式应为:

  • 公网IP请求:http://<公网IP>:3001/products
  • 公网域名请求:http://ec2-xxxx-xxxx-xxxx-xxxx.us-east-2.compute.amazonaws.com:3001/products

2. 安全组入站规则验证

需确保EC2安全组已开放3001端口的TCP流量:

  • 入站规则添加:类型选「自定义TCP」,端口范围填3001,源设置为0.0.0.0/0(测试阶段可临时开放全部IP,后续再缩窄范围)
  • 确认规则已绑定到目标EC2实例

3. 验证EC2内部端口监听状态

在EC2终端执行命令,检查Node进程是否正常监听3001端口:

# 查看端口占用
sudo lsof -i :3001
# 或用netstat
sudo netstat -tulpn | grep 3001

如果无输出,说明Node服务未启动或启动失败,检查app.js是否存在错误,重启服务:

node server.js

4. 本地连通性测试

在EC2实例内部用curl测试API是否正常响应:

curl -X POST http://localhost:3001/products -H "Content-Type: application/json" -d '{"key":"value"}'

如果本地请求正常,说明问题出在外部网络层面;如果本地也失败,优先排查API代码逻辑错误。

5. 私有IP无法访问的原因

EC2私有IP仅能在VPC内部网络访问,外部设备(如本地电脑)无法通过私有IP直接连接实例,必须使用公网IP或公网域名。


内容的提问来源于stack exchange,提问作者Driver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 04:36:03