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

uWSGI与Bottle环境下文件存在却返回404错误排查请求

排查uWSGI+Bottle环境下文件存在却返回404的问题

我来帮你一步步拆解这个问题——文件明明存在却返回404,结合你的文件结构、代码和配置来看,核心问题大概率出在路由匹配或者uWSGI的应用加载配置上,咱们逐个排查:

1. 路由规则和请求路径不匹配

你的/hoge/1/a.py里只定义了@route('/')这个路由,也就是说只有当请求路径是根路径(比如http://example.com/)时,Bottle才会匹配到这个返回"Hello World!"的视图。但你现在访问的是/hoge/1/a.py,这个路径完全不在你定义的路由规则里,Bottle找不到对应的处理函数,自然就返回404了。

解决思路:

  • 要么修改路由规则,直接匹配你的请求路径:
    @route('/hoge/1/a.py')
    def index(): return "Hello World!"
    
  • 要么调整后续的转发配置(uWSGI或Nginx),让请求/hoge/1/a.py被映射到Bottle的根路由/。

2. uWSGI配置缺少关键的应用加载项

从你贴的hoge.ini片段来看,你只配置了uid、gid和socket,但没有告诉uWSGI要加载哪个WSGI应用。这会导致uWSGI无法正确对接你的Bottle应用,即便文件存在,请求也找不到对应的处理逻辑。

你需要在hoge.ini里补充以下配置:

[uwsgi]
uid = nginx
gid = nginx
socket = /var/run/uwsgi/hoge.sock  # 补全你的socket路径
chdir = /hoge/1  # 设置工作目录到a.py所在的文件夹
module = a:application  # 加载a.py里的application对象(Bottle的默认WSGI入口)

解释一下:

  • chdir:让uWSGI的工作目录切换到/hoge/1,这样它能直接找到a.py,不用写完整路径。
  • module:指定WSGI应用的入口,格式是模块名:WSGI对象名,这里a就是a.py(去掉.py后缀),application是你代码里用default_app()创建的WSGI对象。

3. (可选)Nginx反向代理的路径转发问题

如果你的前端用了Nginx做反向代理,还要确保Nginx把请求路径正确转发给uWSGI。比如如果Nginx配置里给请求加了前缀,或者没有把完整路径传递给uWSGI,也会导致Bottle接收到的路径和路由不匹配。

举个正确的Nginx配置示例(假设uWSGI用socket通信):

location /hoge/1/a.py {
    include uwsgi_params;
    uwsgi_pass unix:/var/run/uwsgi/hoge.sock;
    # 如果要把/hoge/1/a.py映射到Bottle的根路由,需要加下面这行
    # uwsgi_param SCRIPT_NAME /hoge/1/a.py;
}

总结排查步骤

  1. 先补全uWSGI的chdir和module配置,确保uWSGI能正确加载你的Bottle应用。
  2. 测试访问根路径(如果配置正确的话),看是否能返回"Hello World!"。
  3. 根据实际需求调整路由规则或Nginx/uWSGI的路径转发配置,让请求路径和路由规则对应上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:15:43