Flutter应用通过HTTP连接AWS EC2实例报连接被拒错误如何解决
问题排查修复步骤
1. 优先排查Flutter侧请求配置错误
- 确认请求URL拼接正确,必须带上协议前缀
http://,不能直接写myipadress/get.php,缺省协议会导致请求端口识别异常,正确写法是http://<你的EC2公网IP>/get.php - 如果你是用安卓模拟器测试,模拟器默认把
127.0.0.1指向自身,不能直接填本地测试用的EC2私网IP,必须填EC2的公网IP - 安卓高版本(9及以上)默认禁止明文HTTP请求,需要在安卓项目的
android/app/src/main/AndroidManifest.xml的application标签中添加属性android:usesCleartextTraffic="true",iOS同理需要在Info.plist中放开HTTP请求限制
2. 排查AWS EC2安全组配置
- 登录AWS控制台,进入对应EC2实例的「安全」选项卡,查看入站规则
- 确认入站规则已经放开**80端口(HTTP)**的
0.0.0.0/0(或者你测试设备的公网IP段)访问权限,仅放开22、3306等端口不会生效 - 不要限制入站规则的源端口,报错中的41038是Flutter侧发起请求的随机源端口,安全组无需专门开放该端口,只需开放目标端口80即可
3. 排查EC2服务器内部配置
- 登录EC2服务器,检查Apache是否监听0.0.0.0:80,执行命令
netstat -tunlp | grep apache,如果结果中仅显示127.0.0.1:80,说明Apache仅允许本地访问,需要修改Apache配置文件中的监听地址为0.0.0.0:80后重启服务 - 检查服务器内部防火墙(iptables/ufw)是否放开80端口,以ufw为例执行
ufw status确认80端口允许入站,iptables执行iptables -L -n查看规则 - 可以在本地测试设备上用curl工具直接请求接口
curl http://<EC2公网IP>/get.php,如果能正常返回JSON说明服务器侧配置无问题,问题出在Flutter侧配置
4. 其他异常排查
- 确认EC2实例没有配置WAF、网络ACL等额外访问控制策略拦截请求
- 确认你的测试设备没有处于VPN、公司内网等限制外部IP访问的网络环境
内容的提问来源于stack exchange,提问作者Gabby10
相关产品推荐
相关产品推荐

