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

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/根目录,模板中的原有路径就能正常访问。

验证步骤

  1. 执行collectstatic后,检查static/目录下是否有css、js(方案2)或确认global/下的文件完整(方案1)
  2. 重启Nginx服务:sudo systemctl restart nginx
  3. 刷新页面,检查静态文件是否加载正常,查看Nginx错误日志确认无404报错

内容的提问来源于stack exchange,提问作者Leonardo do Nascimento Mattos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:05:23