求助:无法访问运行在Amazon Linux EC2上的NestJS服务器
排查EC2上NestJS服务无法通过公网访问的问题
针对你遇到的问题,按以下步骤逐一排查:
检查NestJS服务的绑定地址
默认情况下,NestJS的app.listen(3000)会绑定到localhost(仅本地可访问)。你需要修改src/main.ts中的监听配置,让服务绑定到所有网卡:// src/main.ts await app.listen(3000, '0.0.0.0');修改后重新执行
npm run build和npm run start:prod重启服务。验证服务监听状态
在EC2实例中执行以下命令,确认服务是否正确监听3000端口且绑定地址为0.0.0.0:ss -tulpn | grep 3000如果输出显示
127.0.0.1:3000,说明绑定地址错误,按第一步修改即可;如果没有输出,说明服务未正常启动,检查启动日志排查问题。检查EC2实例的系统防火墙
部分Linux发行版(如Ubuntu)默认启用防火墙,可能未开放3000端口:- 对于ufw防火墙:
sudo ufw status # 如果未开放3000端口,执行: sudo ufw allow 3000/tcp - 对于iptables:
sudo iptables -L | grep 3000 # 如果无输出,添加规则: sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
- 对于ufw防火墙:
确认安全组配置有效性
确保安全组的入站规则满足:- 协议为TCP,端口范围3000
- 源地址设置为
0.0.0.0/0(允许所有公网IP访问)或你当前的公网IP - 该安全组已正确绑定到你的EC2实例
测试内部访问连通性
在EC2实例内部执行:curl http://localhost:3000 # 或使用私有IP curl http://<你的EC2私有IP>:3000如果内部访问正常,说明问题出在外部网络层面;如果内部也无法访问,重点排查服务启动配置和依赖问题。
内容的提问来源于stack exchange,提问作者Haroon Rashid
相关产品推荐
相关产品推荐

