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

Django+Nginx环境下静态文件style.css访问权限被拒求助

Django + Nginx 静态文件权限拒绝问题排查方案

核心错误:Nginx以www-data用户访问静态文件时触发权限拒绝,错误日志显示无法打开/home/ubuntu/learning-app/learning-log/learningLog/staticfiles/learningLogApp/css/estilo.css。

以下是针对性排查步骤:

1. 修复父目录执行权限

Linux访问文件要求所有上级目录具备执行权限(x),仅设置staticfiles目录权限不够,执行以下命令开放父目录权限:

# 逐层开放父目录的执行权限
sudo chmod o+x /home/ubuntu
sudo chmod o+x /home/ubuntu/learning-app
sudo chmod o+x /home/ubuntu/learning-app/learning-log
sudo chmod o+x /home/ubuntu/learning-app/learning-log/learningLog

# 或递归设置所有子目录权限
sudo find /home/ubuntu/learning-app -type d -exec chmod 755 {} \;

2. 检查AppArmor访问限制

Ubuntu默认的AppArmor可能阻止Nginx访问用户目录,临时关闭测试:

sudo aa-complain /etc/apparmor.d/usr.sbin.nginx

若问题解决,需永久添加访问规则:

  1. 编辑AppArmor配置:
sudo nano /etc/apparmor.d/usr.sbin.nginx
  1. 在规则中添加静态文件目录的访问权限:
/home/ubuntu/learning-app/learning-log/learningLog/staticfiles/** r,
  1. 重启AppArmor生效:
sudo systemctl restart apparmor

3. 修正Nginx alias路径格式

当前location /static/的alias末尾缺少/,可能导致路径拼接异常,修改配置:

location /static/ {
    alias /home/ubuntu/learning-app/learning-log/learningLog/staticfiles/;
}

修改后重启Nginx:

sudo systemctl restart nginx

4. 确认静态文件已正确收集

DEBUG=False时必须执行collectstatic将静态文件归集到STATIC_ROOT:

python3 manage.py collectstatic --noinput

执行后检查staticfiles/learningLogApp/css/estilo.css是否存在,且权限为www-data:www-data或全局可读。

5. 验证Nginx运行用户

确认Nginx进程确实以www-data运行:

ps aux | grep nginx

若进程用户不符,修改nginx.conf中的user www-data;配置,重启Nginx。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:55:55