GCP部署Django应用:Nginx无法访问static子文件夹静态文件
解决Django静态文件访问404问题
问题根源
执行collectstatic后,base_static中的静态文件被归类到了static/global/子目录下,但模板中使用{% static %}标签时,路径是css/sb-admin-2.min.css这类直接指向static/根目录的格式,导致Nginx请求/static/css/...时,找不到实际存放在/static/global/css/...的文件。
解决方案
方案1:修改模板中的静态文件引用路径
直接在模板的static标签里加上global/前缀,匹配collectstatic后的实际目录结构:
{% load static %} ... <link href="{% static 'global/css/sb-admin-2.min.css' %}" rel="stylesheet"> <link href="{% static 'global/vendor/fontawesome-free/css/all.min.css' %}" rel="stylesheet" type="text/css"> ...
修改后,前端会请求/static/global/css/...,Nginx就能正确映射到/home/lnmat/app_repo/static/global/css/...。
方案2:调整Django配置,让静态文件直接输出到STATIC_ROOT根目录
如果不想修改大量模板代码,可以修改settings.py中的STATICFILES_DIRS配置,指定base_static的文件直接放到STATIC_ROOT根目录,而不是生成global子目录:
STATIC_URL = '/static/' STATICFILES_DIRS = [ { 'dir': BASE_DIR / 'base_static', 'prefix': '', }, ] STATIC_ROOT = BASE_DIR / 'static/'
修改完成后,重新执行collectstatic命令:
./venv/bin/python manage.py collectstatic --noinput
此时base_static下的css、js、vendor会直接复制到static/根目录,模板中的原有路径就能正常访问。
验证步骤
- 执行collectstatic后,检查
static/目录下是否有css、js(方案2)或确认global/下的文件完整(方案1) - 重启Nginx服务:
sudo systemctl restart nginx - 刷新页面,检查静态文件是否加载正常,查看Nginx错误日志确认无404报错
内容的提问来源于stack exchange,提问作者Leonardo do Nascimento Mattos
相关产品推荐
相关产品推荐

