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; }
总结排查步骤
- 先补全uWSGI的
chdir和module配置,确保uWSGI能正确加载你的Bottle应用。 - 测试访问根路径(如果配置正确的话),看是否能返回"Hello World!"。
- 根据实际需求调整路由规则或Nginx/uWSGI的路径转发配置,让请求路径和路由规则对应上。
内容的提问来源于stack exchange,提问作者re1
相关产品推荐
相关产品推荐

