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

uWSGI搭配Nginx部署Flask/Dash应用访问子路径返回404问题求助

问题初步定位

从你提供的uWSGI服务日志可以确定,请求已经成功从Nginx转发到了uWSGI进程,404是你的Python应用返回的,并非Nginx抛出的默认404,所以排查方向集中在路由转发规则、应用配置两个方向。

具体排查步骤

  • 1. 修正Nginx路径转发规则

你当前的/myproject/ location块未做路径重写,会把完整的/myproject/xxx路径直接传给后端应用,而你的应用默认路由是/,没有匹配/myproject/前缀的路由,自然返回404。你可以参考同配置下shiny、rstudio的重写规则,在location /myproject/块内添加重写规则:

location /myproject/ {
    rewrite ^/myproject/(.*)$ /$1 break;
    uwsgi_pass unix:/home/XXX/XXX/python_dash/myproject/myproject.sock;
    include uwsgi_params;
}
  • 2. 适配Dash应用的路径前缀

如果是部署Dash应用,仅做Nginx重写还不够,Dash的静态资源、回调路径默认基于根路径生成,你需要在Dash初始化时显式指定路径前缀:

app = Dash(__name__, url_base_pathname='/myproject/')

如果是部署纯Flask应用,且需要保留/myproject前缀,也可以通过注册蓝图、配置APPLICATION_ROOT参数实现。

  • 3. 验证应用本身的路由配置

先在VPS本地绕过Nginx、uWSGI直接测试应用可用性,执行以下命令启动临时测试服务:
uwsgi --http :8000 --module wsgi:app --chdir /home/XXX/XXX/python_dash/myproject
之后在VPS本地执行curl 127.0.0.1:8000,确认应用根路由可以正常返回内容,再执行curl 127.0.0.1:8000/myproject/,确认是否返回404,排查应用本身的路由配置问题。

  • 4. 检查wsgi.py文件配置

如果是部署Dash应用,注意WSGI入口需要导出Dash实例的server属性(该属性才是符合WSGI规范的Flask实例),你的wsgi.py文件应该符合以下格式:

from your_dash_app_file import app # 此处的app是Dash实例
application = app.server

同时需要同步修改uWSGI配置文件myproject.ini的module参数为module = wsgi:application,如果直接导出Dash实例作为WSGI应用,会出现路由匹配异常。

  • 5. 补充uWSGI配置避免路径异常

建议在myproject.ini中显式指定工作目录,避免相对路径导致的sock文件、模块加载异常:

[uwsgi]
chdir = /home/XXX/XXX/python_dash/myproject
module = wsgi:application
master = true
processes = 5
socket = myproject.sock
chmod-socket = 666
vacuum = true
die-on-term = true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:45:02