Django部署后media下avatar目录访问报403 Forbidden故障
问题根因
你贴出的目录权限信息已经直接指向故障原因:avatar目录的权限为drwx------(对应八进制权限值700),仅目录所有者拥有读、写、进入目录的权限,Nginx/应用服务的运行用户(通常为www-data、nginx等低权限服务账号)没有该目录的访问权限,自然无法读取目录内任何文件,返回403错误。
其余可正常访问的目录权限均为drwxr-xr-x(对应八进制权限值755),所有用户都拥有进入、读取目录内容的权限,因此资源加载不受影响。该故障和文件大小、文件名规则、文件格式没有关联。
本地开发环境无异常是因为你启动runserver时使用的是当前登录用户,该用户恰好是avatar目录的所有者,有权限读取目录内容,不会触发权限拦截。
修复操作
- 直接修正
avatar目录权限:chmod 755 /替换为你服务器上项目的实际绝对路径/media/avatar - 建议批量校准整个media目录的权限,避免后续其他子目录出现同类问题:
# 将media下所有目录权限设为755 find /替换为你服务器上项目的实际绝对路径/media -type d -exec chmod 755 {} \; # 将media下所有文件权限设为644 find /替换为你服务器上项目的实际绝对路径/media -type f -exec chmod 644 {} \; - 如果目录属主和服务运行用户不匹配,同步修正属主(以服务运行用户为www-data为例,如果你用的是nginx、CentOS下的apache用户请对应替换):
chown -R www-data:www-data /替换为你服务器上项目的实际绝对路径/media
验证
权限修正后无需重启服务,直接刷新页面访问对应资源即可,也可以在服务器本地执行命令验证返回状态:
curl -I http://你的站点域名/media/avatar/1.png
返回200状态码即代表修复完成。
内容的提问来源于stack exchange,提问作者Weilory
相关产品推荐
相关产品推荐

