部署Django+Lighttpd+Gunicorn时静态文件无法加载求助
Django+Lighttpd+Gunicorn静态文件404及MIME类型问题排查方案
1. 确认Django静态文件收集完成
部署模式下Django不会自动托管静态文件,必须手动收集所有app的静态资源到指定目录:
- 执行命令:
python manage.py collectstatic,确认输出显示文件已复制到/usr/web/myapp/static - 检查
settings.py配置:
确保STATIC_URL = '/static/' STATIC_ROOT = '/usr/web/myapp/static/'STATIC_ROOT与实际静态文件目录完全一致。
2. 修正Lighttpd静态文件路由配置
在myapp.conf中添加静态文件匹配规则,且必须放在反向代理配置之前(Lighttpd按配置顺序匹配请求):
# 处理静态文件请求 $HTTP["url"] =~ "^/static/" { alias.url = ( "/static/" => "/usr/web/myapp/static/" ) # 明确指定MIME类型,避免匹配错误 mimetype.assign = ( ".html" => "text/html", ".css" => "text/css", ".js" => "application/javascript", ".png" => "image/png", ".jpg" => "image/jpeg", ".gif" => "image/gif", ".svg" => "image/svg+xml" ) # 禁用反向代理,直接返回静态文件 proxy.server = () } # 转发动态请求到Gunicorn $HTTP["url"] !~ "^/static/" { proxy.server = ( "" => ( ( "host" => "127.0.0.1", "port" => 8000 # 对应Gunicorn监听的端口 ) ) ) proxy.header = ( "map-urlpath" => ( "" => "" ) ) }
3. 验证文件权限与系统安全策略
- 确保Lighttpd运行用户(通常为
www-data或lighttpd)拥有静态文件目录的读权限:chown -R www-data:www-data /usr/web/myapp/static chmod -R 755 /usr/web/myapp/static - 若使用SELinux,检查是否阻止了Lighttpd访问目录:
- 临时关闭SELinux测试:
setenforce 0,若静态文件可访问,执行以下命令添加永久规则:
semanage fcontext -a -t httpd_sys_content_t "/usr/web/myapp/static(/.*)?" restorecon -Rv /usr/web/myapp/static - 临时关闭SELinux测试:
4. 重启服务并验证配置
- 重启Lighttpd使配置生效:
systemctl restart lighttpd - 检查配置语法是否正确:
lighttpd -t -f /etc/lighttpd/lighttpd.conf,确保myapp.conf已被主配置文件include(主配置中需有include "/etc/lighttpd/conf.d/myapp.conf")
内容的提问来源于stack exchange,提问作者Madhav Sankar
相关产品推荐
相关产品推荐

