lighttpd搭配uWSGI模块时PATH_INFO未定义,Bottle.py崩溃如何解决?
解决lighttpd + uWSGI下PATH_INFO缺失问题
当前你的lighttpd配置未正确拆分SCRIPT_NAME和PATH_INFO,导致Bottle这类依赖WSGI规范的框架无法获取路由信息。以下是修复方案:
修改lighttpd配置
调整scgi.server块的配置,核心是启用路径剥离并修正匹配规则:
scgi.protocol = "uwsgi" scgi.server = ( "/tp2" => ( "tp2-app" => ( "host" => "127.0.0.1", "port" => 8080, "check-local" => "disable", "strip-request-uri" => "enable", "fix-root-scriptname" => "enable" ) ), )
关键配置说明
"strip-request-uri" => "enable":强制lighttpd将匹配的前缀/tp2从请求URI中剥离,剩余部分作为PATH_INFO传递给后端应用,同时将SCRIPT_NAME设置为/tp2,符合WSGI规范。- 路径改为
/tp2而非/tp2/:确保匹配所有以/tp2开头的请求(包括/tp2、/tp2/hello等),避免仅匹配/tp2/开头的路径。 - 保留
fix-root-scriptname" => "enable":当请求为/tp2/时,自动将SCRIPT_NAME设为/tp2、PATH_INFO设为/,避免空值问题。
验证效果
修改配置后重启lighttpd,再次请求/tp2/hello?date=2024-03-24T14:22:10-04:00,环境变量中将出现:
SCRIPT_NAME = /tp2 PATH_INFO = /hello
此时Bottle即可正常识别路由,不会因缺失PATH_INFO崩溃。
uWSGI启动命令保持不变
无需调整uWSGI的启动参数,继续使用:
uwsgi --uwsgi-socket 127.0.0.1:8080 --plugin python3 -w hello_world_app
内容的提问来源于stack exchange,提问作者ixe013
相关产品推荐
相关产品推荐

