You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS ALB针对部署Flask应用的EC2实例返回502 Bad Gateway错误排查

解决ALB + Flask部署的502 Bad Gateway问题

我之前在部署Flask应用到EC2并搭配ALB时,也踩过一模一样的502坑,结合你的配置细节,咱们逐个排查可能的原因:

1. 检查Flask的绑定地址(最常见原因)

Flask默认的启动命令flask run只会绑定127.0.0.1,这意味着只有EC2本机能访问服务,ALB作为外部请求方根本连不上你的Flask应用。

解决方法:

  • 启动Flask时指定绑定所有网卡:
    flask run --host=0.0.0.0 --port=5000
    
  • 或者在代码里直接设置:
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000)
    

验证:在EC2上执行curl [你的EC2内网IP]:5000,如果能返回200,说明地址绑定没问题。

2. 确认ALB目标组的配置

  • 目标组的端口必须和Flask监听的5000端口一致,协议要选HTTP(因为Flask默认用HTTP)。
  • 目标组注册的EC2实例必须是内网IP(ALB通过内网和EC2通信,公网IP会导致访问失败)。
  • 虽然你说健康检查正常,但可以再确认下健康检查的路径是否和Flask的实际路由匹配(比如根路径/)。

3. 检查安全组的双向访问权限

除了EC2安全组开放5000端口的入站规则,还要确保:

  • ALB的安全组出站规则允许访问EC2安全组的5000端口(或者直接允许到EC2内网IP段的TCP 5000流量)。
  • EC2的安全组入站规则的源必须包含ALB的安全组,而不是只开放0.0.0.0/0(当然开放0.0.0.0也可以,但更安全的是限制到ALB安全组)。

4. 验证EC2到Flask的连通性

在EC2实例上执行以下命令排查:

# 确认Flask进程在监听5000端口
netstat -tulpn | grep 5000
# 应该能看到类似这样的输出:
# tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN      1234/python3

如果看不到0.0.0.0:5000,说明还是地址绑定的问题。

按照上面的步骤排查,大概率能解决502问题,我当时就是踩了Flask默认绑定localhost的坑,改完host就正常了。

内容的提问来源于stack exchange,提问作者sol-invictii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:29:25