部署在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
相关产品推荐
相关产品推荐

