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

Ubuntu下Django+Nginx部署静态资源/CSS/图片/favicon报403 Forbidden错误

问题根因及修复方案

Nginx返回403的核心原因是Nginx进程无权限读取静态资源文件,叠加几处配置错误共同导致,按以下顺序排查修复即可:

1. 修复配置基础拼写错误

你在settings.py里写的调试开关是debag = False,变量名拼写错误,Django可识别的调试开关为全大写的DEBUG,先修正为:

DEBUG = False

同时确认ALLOWED_HOSTS配置已添加你的服务器公网IP、绑定域名,否则后续动态请求也会触发400错误。

2. 修正Nginx配置错误

你当前Nginx配置里的静态资源路径使用了占位符dbms_template_path,属于相对路径/无效路径,Nginx的root/alias指令必须填写操作系统绝对路径,同时补全缺失的反向代理头配置,修正后的参考配置如下:

server {
    listen 80;
    server_name 替换为你的实际公网IP/绑定域名;

    location /.well-known {
        root /var/www/html;
    }

    location = /favicon.ico {
        # 替换为项目的真实绝对路径
        alias /你的项目实际存放绝对路径/djangowebsite/static/favicon.ico;
    }

    location /static/ {
        # 替换为项目的真实绝对路径,root指向static文件夹的上一级目录
        root /你的项目实际存放绝对路径/djangowebsite;
        autoindex off;
    }

    location /media/ {
        # 替换为项目的真实绝对路径
        root /你的项目实际存放绝对路径/djangowebsite;
        autoindex off;
    }

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
        add_header Access-Control-Allow-Origin *;
    }
}

配置修改完成后先执行nginx -t校验配置合法性,校验通过后执行systemctl reload nginx重载配置生效。

3. 修复文件系统权限问题

这是触发403的最常见原因:Ubuntu环境下Nginx默认运行用户为www-data,如果项目文件存放在个人用户目录、/root目录下,或目录权限未开放,www-data无读取权限就会返回403,依次执行以下命令修复:

# 替换路径为项目真实绝对路径,将项目目录所有者赋予Nginx运行用户
chown -R www-data:www-data /你的项目实际存放绝对路径/djangowebsite/
# 给静态、媒体目录开放可读可执行权限
chmod -R 755 /你的项目实际存放绝对路径/djangowebsite/static/
chmod -R 755 /你的项目实际存放绝对路径/djangowebsite/media/

注意不要把项目放在/root目录下,该目录默认对其他用户完全禁止访问,即使修改权限也存在安全隐患,建议移动到/var/www/或普通用户家目录下。

4. 执行静态文件收集

关闭DEBUG模式后Django不再自动代理静态资源,必须执行收集命令将项目内静态资源、admin后台静态资源全部汇总到STATIC_ROOT指定的目录:

# 进入项目虚拟环境,在manage.py同级目录下执行
python manage.py collectstatic --noinput

执行完成后确认STATIC_ROOT对应的static目录下存在css、js、图片、admin等静态资源子目录。

5. 特殊情况排查

如果以上操作完成后仍返回403,检查是否手动开启了SElinux,SElinux默认会拦截Nginx访问用户目录的请求,执行setenforce 0临时关闭测试,如果关闭后资源加载正常,给静态资源目录添加SElinux访问白名单即可。

所有操作完成后按Ctrl+F5硬刷新浏览器即可正常加载所有静态资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:39:19