Windows/Ubuntu EC2实例中Flask应用无法通过公网IP访问的问题
Flask EC2部署访问失败问题排查与解决
你的推测是否正确?
不正确。使用flask run --port 80 --host=0.0.0.0时,Flask会监听实例上所有可用的网络接口,控制台显示私有IP只是默认输出格式,不代表仅响应该IP的请求。
解决步骤
- 检查EC2安全组入站规则
确保安全组中添加了TCP 80端口的入站规则,来源设置为你的本地IP(测试阶段可临时设为0.0.0.0/0,生产环境需限制具体IP)。即使IIS能正常访问,也需确认该规则的来源范围是否覆盖你的本地机器。 - 检查实例本地防火墙
- Windows:打开「Windows Defender防火墙」,确认入站规则允许TCP 80端口的外部连接,可临时关闭防火墙验证问题是否解决(验证后务必重新开启)。
- Ubuntu:执行
sudo ufw status查看防火墙状态,若开启则添加规则sudo ufw allow 80/tcp,再执行sudo ufw reload生效。
- 确认Flask监听地址
- Windows:在命令提示符执行
netstat -ano | findstr ":80",检查输出中是否存在0.0.0.0:80的监听记录,对应PID需与Flask进程一致。 - Ubuntu:执行
ss -tulpn | grep ":80",确认监听地址为0.0.0.0:80。
- Windows:在命令提示符执行
- 实例内部验证服务可用性
在EC2本地终端(Windows用PowerShell,Ubuntu用终端)执行curl http://localhost:80或curl http://<private_IP>:80,若能返回Flask应用内容,说明服务本身正常,问题出在网络链路。
内容的提问来源于stack exchange,提问作者Mauro Assis
相关产品推荐
相关产品推荐

