AWS EC2 Ubuntu实例运行Docker容器访问公网DNS连接被拒如何解决
问题排查与解决方案
核心原因排查方向
- 端口访问规则配置错误:你的前端服务映射在EC2实例的3000端口、后端在5000端口,但你访问的是默认443端口的HTTPS地址,且AWS EC2安全组默认没有放行3000、5000端口的入站规则。
- 协议不匹配:你使用HTTPS协议访问,但React前端默认启动的是HTTP服务,没有配置SSL证书的情况下HTTPS请求会直接被拒绝。
- Ubuntu防火墙未放行端口:EC2实例的Ubuntu系统默认ufw防火墙可能没有开放3000、5000端口的访问权限。
- 服务监听地址配置问题:如果你的React或Node服务配置为仅监听127.0.0.1,会导致公网请求无法命中服务。
分步解决方案
第一步:修正访问地址
你的前端服务运行在3000端口,使用HTTP协议访问,正确访问地址应为 http://ec2-52-90-91-101.compute-1.amazonaws.com:3000,不要使用HTTPS协议,也不要省略端口号。
第二步:配置EC2安全组入站规则
- 登录AWS控制台,进入对应EC2实例的安全组配置页
- 添加入站规则:
- 类型:自定义TCP,端口范围:3000,源:0.0.0.0/0(如果需要限制访问源可以指定固定IP段)
- 类型:自定义TCP,端口范围:5000,源:0.0.0.0/0
- 保存规则后等待1分钟生效。
第三步:放行Ubuntu系统防火墙端口
登录EC2实例终端,依次执行以下命令:
sudo ufw allow 3000/tcp sudo ufw allow 5000/tcp sudo ufw reload
第四步:验证服务监听配置
确认你的React和Node服务的监听地址为0.0.0.0而非127.0.0.1:
- Node服务启动时监听地址配置为
0.0.0.0:5000 - React项目在package.json的启动脚本中添加
--host 0.0.0.0参数,示例:"start": "react-scripts start --host 0.0.0.0"
可选优化(如需直接用HTTPS/默认端口访问)
如果不想访问时带端口号,可以加一层Nginx反向代理,监听80/443端口,将请求转发到3000/5000端口,同时配置SSL证书即可支持HTTPS访问。
内容的提问来源于stack exchange,提问作者Xr7TSi
相关产品推荐
相关产品推荐

