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

部署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访问目录:
    1. 临时关闭SELinux测试:setenforce 0,若静态文件可访问,执行以下命令添加永久规则:
    semanage fcontext -a -t httpd_sys_content_t "/usr/web/myapp/static(/.*)?"
    restorecon -Rv /usr/web/myapp/static
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:07:03