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

Django部署后Nginx无法加载静态资源返回404问题求助

Django部署静态资源404问题解决

问题梳理

刚接触Django,在Linux环境用Gunicorn+Nginx部署后:

  • 应用核心功能、页面导航及POST请求正常运行
  • CSS、图片等静态资源返回404,但静态文件夹内的CSV文件可通过视图正常读取
  • Nginx访问日志显示请求路径重复拼接,导致404
  • 曾尝试修改Nginx alias、settings.py的STATIC_ROOT/STATIC_URL,设置STATIC_URL为'/'触发media URL错误,设为'/Static_File_Storage'出现权限拒绝

配置错误分析与修正

1. 修正settings.py配置

当前STATIC_URL设为本地文件路径是核心错误,STATIC_URL是浏览器请求静态资源的URL前缀,而非本地路径;STATIC_ROOT写法也有误,会生成错误的绝对路径。

修改后settings.py相关配置:

# BASE_DIR是项目根目录,直接拼接静态文件夹名称即可
STATIC_ROOT = os.path.join(BASE_DIR, 'Static_File_Storage')
# STATIC_URL设为URL前缀,注意开头加/,结尾加/
STATIC_URL = '/Static_File_Storage/'

修改后必须执行静态文件收集命令,确保所有APP的静态文件同步到STATIC_ROOT目录:

python manage.py collectstatic

2. 修正Nginx配置

确保Nginx的location路径与STATIC_URL完全匹配,同时解决权限问题:

server {
    listen 80;
    server_name redacted;

    location = /favicon.ico { access_log off; log_not_found off; }
    # location路径与STATIC_URL一致,结尾保持/
    location /Static_File_Storage/ {
        # alias指向STATIC_ROOT的绝对路径,结尾加/
        alias /home/beachhouse/PycharmProjects/BH_Django_Project/BH_DJANGO/Static_File_Storage/;
        # 添加缓存控制配置
        autoindex off;
        expires 30d;
        add_header Cache-Control "public, no-transform";
        # 提前给静态文件夹设置可读权限(执行以下命令)
        # chmod -R 755 /home/beachhouse/PycharmProjects/BH_Django_Project/BH_DJANGO/Static_File_Storage/
        # chown -R www-data:www-data /home/beachhouse/PycharmProjects/BH_Django_Project/BH_DJANGO/Static_File_Storage/
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

3. 修正模板静态标签引用

模板中使用{% static %}时,文件路径不要开头加/,避免URL路径错误:

{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}"/>
<img class="login_img" src="{% static 'logo.png' %}" alt="logo">

4. 重启服务生效

修改配置后重启Nginx和Gunicorn:

sudo systemctl restart nginx
sudo systemctl restart gunicorn

关键说明

  • STATIC_ROOT是Django收集所有静态文件的统一目录,必须为本地绝对路径
  • STATIC_URL是浏览器访问静态资源的URL前缀,必须以/开头和结尾,与Nginx的location路径严格对应
  • 静态文件夹必须赋予Nginx进程(通常为www-data用户)可读权限,否则会触发权限拒绝错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:45:52