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

AWS EC2上Flask应用无法通过Postman访问问题求助

AWS EC2 Flask应用无法外部访问的排查与解决

一、先修复代码中的语法错误

你的代码存在两处致命错误,会导致服务无法正常处理请求甚至启动失败:

  1. 缺失request导入:Flask的request对象未导入,需修改导入语句:
from flask import Flask, request
  1. return语句语法错误:末尾多了一个右括号,修正后:
return json.dumps(sutime.parse(input_str), sort_keys=True, indent=4)

修正后的完整代码:

import json
from sutime import SUTime
from flask import Flask, request

app = Flask(__name__)

@app.route("/test/", methods=["POST"])
def time_word_reg():
    # 检测时间相关词汇(如今天、明天)并返回分析结果
    raw = request.get_data()
    data = json.loads(raw)
    input_str = data['key_str']
    sutime = SUTime(mark_time_range=True)
    return json.dumps(sutime.parse(input_str), sort_keys=True, indent=4)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)

二、EC2实例内部验证服务可用性

修复代码后,先在实例内部确认服务是否正常:
启动应用后,执行以下curl命令测试:

curl -X POST http://127.0.0.1:5000/test/ -H "Content-Type: application/json" -d '{"key_str": "tomorrow"}'

如果能返回JSON格式的时间分析结果,说明服务本身无问题;若报错,查看终端输出的错误日志定位问题。

三、网络层面排查

  1. 确认端口监听状态:在实例上执行命令,检查Flask是否正确监听0.0.0.0:5000:
netstat -tulpn | grep 5000

若结果仅显示127.0.0.1:5000,说明服务未对外开放,需确认app.run(host='0.0.0.0')代码是否生效。
2. 检查实例本地防火墙:部分EC2实例默认开启iptables规则,可能拦截端口。执行iptables -L查看规则,若存在拦截5000端口的配置,添加放行规则:

sudo iptables -A INPUT -p tcp --dport 5000 -j ACCEPT
  1. 验证安全组与网络ACL:
    • 安全组规则需确认TCP端口的来源为0.0.0.0/0(允许所有外部IP访问);
    • 检查VPC网络ACL,确保入站、出站规则均允许TCP 5000端口流量(网络ACL为无状态,双向规则都需配置)。

四、判断旧答案是否适用的方法

要确定7年前的答案能否解决当前问题,可从三点判断:

  • 技术栈匹配度:若旧答案针对Flask+AWS EC2组合,核心的服务监听、网络配置逻辑未发生变化,大概率适用;
  • 问题现象一致性:对比旧问题的报错(连接超时/拒绝)、环境(EC2安全组、端口监听)是否与你的情况完全匹配;
  • 核心逻辑验证:提取旧答案中的通用排查步骤(如绑定0.0.0.0、检查安全组、端口监听)逐一验证,无需照搬全部操作。

内容的提问来源于stack exchange,提问作者Carlos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:22:19