使用lighttpd部署Django polls项目遇404错误,求配置方案
解决方案
问题核心是lighttpd默认会移除scgi.server配置中指定的前缀路径(/polls)再传递给Django,导致Django收到的请求路径和内置服务器环境不一致,进而出现404或URL生成错误。只需调整lighttpd配置,保留完整请求路径传递给Django即可:
修改lighttpd.conf配置
在scgi.server的配置块中添加strip-request-url => ""选项,禁止lighttpd移除请求URL的前缀:
server.modules += ("mod_scgi","mod_rewrite") scgi.protocol = "uwsgi" scgi.server = ( "/polls" => (( "host" => "localhost", "port" => 7000, "check-local" => "disable", "strip-request-url" => "" )) )
原理说明
- 该配置让lighttpd将完整的请求URL(如
/polls/、/polls/1/)作为PATH_INFO传递给Django,和内置服务器收到的路径完全一致 - Django的URL规则无需任何修改,生成的链接(如
/polls/1/)会直接匹配lighttpd的转发规则,不会出现重复路径的问题 - 访问
http://localhost:8080/polls/时,Django收到的PATH_INFO是/polls/,会匹配根urls.py中的path('polls/', include('polls.urls')),进而匹配polls.urls中的空路径,正常加载首页
额外注意事项
- 确保uWSGI以Django项目根目录为运行目录,且启动命令未设置子路径挂载参数,例如使用:
uwsgi --socket :7000 --module tutorial1.wsgi --chdir /path/to/your/django/project - 如果需要处理静态文件,可在lighttpd中添加静态文件路由规则,避免静态请求被转发给Django:
$HTTP["url"] =~ "^/polls/static/" { alias "/path/to/your/django/project/static/" }
内容的提问来源于stack exchange,提问作者Henrique Bucher
相关产品推荐
相关产品推荐

