AWS Ubuntu实例部署Node.js服务后公网IP无法访问(提示无安全连接)
AWS Ubuntu实例部署Node.js服务后公网IP无法访问(提示无安全连接)
我之前也碰到过几乎一模一样的问题,别慌,咱们一步步来排查解决:
先确认访问协议是否正确
你提到服务在本地能正常运行,大概率是因为本地用的是HTTP访问,但在公网访问时不小心用了HTTPS(浏览器可能自动跳转)。Node.js默认启动的服务是HTTP协议,没有配置SSL证书的情况下,HTTPS请求肯定会报“无法提供安全连接”的错误。
试试直接用http://<你的公网IP>:<服务端口>访问,比如服务跑在3000端口就访问http://x.x.x.x:3000,应该就能正常连接了。另外控制台里的crbug/1173575错误是Chrome浏览器的通用报错,本质是HTTPS请求失败导致的,不用太在意这个错误本身。检查AWS安全组的入站规则
AWS默认的安全组是封闭大部分端口的,你得确保服务用的端口已经对外开放:- 登录AWS控制台,进入EC2实例列表
- 点击你的实例,找到关联的安全组并进入详情页
- 切换到「入站规则」标签,点击「编辑入站规则」
- 添加一条规则:类型选「自定义TCP」,端口范围填你的Node.js服务端口(比如3000),源选「0.0.0.0/0」(测试阶段用,后续可以改成指定IP提高安全性)
- 保存规则后再尝试访问
检查Ubuntu本地防火墙(ufw)
如果你的Ubuntu实例开启了ufw防火墙,即使AWS安全组开放了端口,本地防火墙也会拦截请求。可以执行以下命令开放端口:sudo ufw allow <你的服务端口>/tcp sudo ufw reload执行完后再测试访问是否正常。
确认Node.js服务的绑定地址
有时候服务代码里监听的是localhost(127.0.0.1),这种情况下服务只能在实例内部访问,公网无法连接。你需要修改代码,让服务监听0.0.0.0地址,比如:// Express框架示例 app.listen(3000, '0.0.0.0', () => { console.log('服务已启动,监听0.0.0.0:3000'); });修改后重启服务,再用公网IP访问试试。
按照这个顺序排查下来,基本就能解决问题啦!
备注:内容来源于stack exchange,提问作者Ilia
相关产品推荐
相关产品推荐

