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

部署在EC2上的简易Flask应用POST请求挂起问题排查

问题描述

我在EC2实例(地址为ec2<ip>.<region>.compute.amazonaws.com)上部署了一个接收POST请求的Flask应用,但发送请求时出现挂起现象。

服务器代码

import json
from flask import Flask, request

app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
    payload = request.data
    event = json.loads(payload)
    print(payload, event)
    return "200"

启动命令

python3 -m flask run --host=0.0.0.0 --port=8080

客户端请求代码

import requests

url = 'http://ec2<ip>.<region>.compute.amazonaws.com/webhook'
myobj = {'somekey': 'somevalue'}

x = requests.post(url, json = myobj)

print(x.text)
排查与解决方向

以下是可能导致请求挂起的原因及对应解决办法:

  • EC2安全组未开放目标端口:默认安全组仅允许SSH(22端口)入站流量,需手动添加规则,允许TCP 8080端口的入站请求(测试阶段可暂时允许所有IP 0.0.0.0/0,后续再限制特定IP范围)。
  • 网络ACL限制流量:检查EC2所在子网的网络ACL,确保入站规则允许8080端口请求,出站规则允许返回流量(默认网络ACL为全通状态,若有修改需核对规则)。
  • 实例公网地址错误:确认客户端代码中的域名是否替换为实例实际的公网域名(格式类似ec2-12-34-56-78.us-east-1.compute.amazonaws.com),也可直接使用实例公网IP发起请求测试。
  • Flask进程未持续运行:若启动Flask的终端被关闭,进程会终止。可使用nohup python3 -m flask run --host=0.0.0.0 --port=8080 &命令让进程后台运行,避免终端关闭导致服务中断。
  • 代码解析优化(辅助排查):虽然不会直接导致挂起,但可优化服务器代码,用request.get_json()替代手动解析request.data,避免因JSON格式错误抛出未捕获异常:
    def webhook():
        event = request.get_json()
        print(event)
        return "200"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 10:53:19