Amazon Linux 2 EC2上Flask服务无法外网访问的排查求助
Flask服务无法外网访问的解决(Amazon Linux 2 EC2)
核心问题定位
Flask默认启动时绑定127.0.0.1,仅允许本地回环访问,无法响应外部网卡的请求——这是导致外网无法访问的直接原因。结合你提到Apache可正常访问的情况,需按以下步骤排查修复:
1. 修改Flask监听地址
将服务绑定到实例的所有网卡(0.0.0.0),而非仅本地回环:
- 临时启动时指定参数:
flask run --host=0.0.0.0 --port=5000 - 或通过环境变量设置(当前会话有效):
export FLASK_RUN_HOST=0.0.0.0 flask run --port=5000
2. 确认EC2安全组入站规则
确保Flask使用的端口(如5000)已在安全组中开放:
- 登录AWS控制台,进入目标EC2实例的安全组配置页面
- 添加自定义TCP规则:端口范围填
5000,源地址设为0.0.0.0/0(允许所有外网访问,或指定你的公网IP提升安全性) - 保存规则后等待1-2分钟生效
3. 检查实例本地防火墙
Amazon Linux 2默认启用firewalld,需确认端口未被拦截:
- 开放端口并永久生效:
sudo firewall-cmd --add-port=5000/tcp --permanent sudo firewall-cmd --reload - 若使用
iptables,执行:sudo iptables -A INPUT -p tcp --dport 5000 -j ACCEPT sudo service iptables save
4. 验证监听状态
确认Flask已正确绑定到所有网卡:
netstat -tulpn | grep 5000
输出应包含0.0.0.0:5000,而非仅127.0.0.1:5000。
内容的提问来源于stack exchange,提问作者Kevin Butler
相关产品推荐
相关产品推荐

