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

Docker部署的Flask应用提交POST请求时出现404错误求助

Docker部署的Flask应用提交POST请求时出现404错误求助

嘿,我来帮你排查这个404的问题!先梳理下整个请求链路:你的前端表单提交到/api/data,Nginx负责代理/api/开头的请求到后端Flask服务,但路径映射的配置错误是导致404的核心原因。

问题根源拆解

先看你的Nginx配置片段:

location /api/ {
   proxy_pass http://backend:5000/;
   proxy_http_version 1.1;
   proxy_set_header Host $host;
}

当用户点击提交按钮时,浏览器发送的请求路径是/api/data。按照Nginx的匹配规则,location /api/会把请求路径中的/api/替换成proxy_pass末尾的斜杠/,所以实际转发到后端的请求路径变成了http://backend:5000/data。

但你的后端Flask定义的路由是:

@app.route('/api/data', methods=['POST'])

后端根本没有/data这个路由,自然就返回404了!

两种可行的修复方案

方案1:调整Nginx代理配置(推荐)

修改Nginx的proxy_pass,去掉末尾的斜杠,这样Nginx会完整保留原请求的路径前缀:

location /api/ {
   proxy_pass http://backend:5000;  # 移除最后的/
   proxy_http_version 1.1;
   proxy_set_header Host $host;
}

调整后,/api/data的请求会被转发到http://backend:5000/api/data,正好匹配后端的路由规则。

方案2:修改后端Flask路由

如果不想改动Nginx配置,可以把后端的路由前缀去掉,让它匹配Nginx转发后的路径:

@app.route('/data', methods=['POST'])  # 将/api/data改为/data
def receive_data():
    input_text = request.form.get('inputText')
    if not input_text:
        return "Fehlender 'inputText' im Formular.", 400
    # 后续逻辑保持不变...

这样Nginx转发过来的/data请求就能正确匹配后端路由了。

额外的小检查点

  1. 确认你的后端Flask应用确实运行在5000端口(和Nginx配置里的backend:5000对应),并且所有Docker容器都处于同一个Docker网络中,保证容器间能正常通信。
  2. 你的表单使用默认的application/x-www-form-urlencoded编码,后端用request.form.get('inputText')获取数据是正确的,这部分没有问题。

按照上面的方法调整后,应该就能解决404的问题啦!

备注:内容来源于stack exchange,提问作者julixw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:14:36