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

Django结合Gunicorn时CSS/JS文件HTTP 404错误求助

Django + Gunicorn 静态文件404问题排查与解决

核心排查:Nginx是否正确接管静态请求

Gunicorn仅负责处理Django的动态请求,静态文件必须由Nginx直接响应,不能让请求流转到Gunicorn。

1. 检查Nginx静态文件映射配置

确保Nginx配置中存在专门处理/static/路径的location块,且指向STATIC_ROOT的实际目录:

server {
    # 其他基础配置(监听端口、域名、反向代理Gunicorn的规则)
    
    location /static/ {
        alias /绝对路径/到你的/static_root/;  # 注意末尾斜杠要匹配,避免路径拼接错误
        expires 30d;  # 可选:设置静态文件缓存过期时间
        access_log off;
    }
}
  • 区分alias和root:如果用root,路径需写成root /包含static目录的上级路径/,Nginx会自动拼接/static/到路径后,比如root /var/www/project/对应实际路径/var/www/project/static/。

2. 验证Nginx配置并重启

执行以下命令确保配置无语法错误,再重启服务生效:

nginx -t
systemctl restart nginx  # 对应你的Nginx服务管理命令

3. 确认静态目录权限

确保Nginx进程用户(通常为www-data、nginx)对STATIC_ROOT目录有读权限:

# 查看目录权限
ls -ld /绝对路径/到你的/static_root/
# 修复权限(如果需要)
chown -R www-data:www-data /绝对路径/到你的/static_root/
chmod -R 755 /绝对路径/到你的/static_root/

检查Django静态配置一致性

1. 核对STATIC_ROOT路径

查看settings.py中的STATIC_ROOT配置,确保和Nginx映射的路径完全一致(Linux系统路径区分大小写):

STATIC_ROOT = '/绝对路径/到你的/static_root/'

2. 重新执行collectstatic

再次执行命令确认静态文件已正确复制到目标目录:

python manage.py collectstatic --noinput

执行后手动检查/绝对路径/到你的/static_root/css/home.css等文件是否存在。

排查请求流向

如果Gunicorn日志仍出现静态文件404,说明Nginx未正确拦截请求:

  • 检查Nginx的server块是否监听了正确的端口/域名,是否有优先级更高的默认server块导致请求分流;
  • 确保/static/的location块写在反向代理/的location块之前,Nginx会优先匹配最长前缀的路径规则。

额外验证

  • 强制刷新浏览器(Ctrl+F5)或使用无痕模式测试,避免缓存旧的404响应;
  • 确认settings.py中DEBUG=False,生产环境下Django不会自行处理静态文件,必须依赖Nginx。

内容的提问来源于stack exchange,提问作者user1933205

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:22:19