Django 服务器错误 403 forbidden nginx/1.10.3 (ubuntu)

Django server error 403 forbidden nginx/1.10.3 (ubuntu)

我在 ubuntu 服务器中有一些媒体内容。我可以上传文件。但是当我尝试加载文件时,它显示 403 forbidden nginx/1.10.3 (ubuntu)。在文件权限中,它显示 rw-- ------.

如何才能无误地检索所有内容? 我不熟悉Ubuntu

我用这个片段来恢复文件。但是,它仅适用于一次。一段时间后,它显示相同的错误。

sudo chmod -R 664 /home/django/media/image/
sudo chmod -R a+X /home/django/media/image/

nginx 用户必须能够读取这些文件。您可以使用组权限来允许这样做。此外,wsgi 用户必须设置其 umask 以便其创建的文件对于该组也是可读的。

在你的情况下,你的 wsgi 用户似乎有 umask 077,这使得它创建的文件只能由所有者 (rw--------) 读取。因此 nginx 没有读取权限。而是使用 umask 027,这将允许组用户访问这些文件,但不能写入它们(nginx 没有理由具有写入权限)。

例如,如果您使用 gunicorn 作为 wsgi 服务器,则可以使用 gunicorn 标志 --group www --umask 027。确保 gunicorn 和 nginx 用户都属于 www 组。

像这样修复权限。

# set group to `www` for all files recursively
sudo chgrp www -R /home/django/media/
# set all files to be read/write by owner and readable by group `www`
find /home/django/media/ -type f -exec chmod 640 {} ; 
# same with directories +execute
find /home/django/media/ -type d -exec chmod 750 {} ; 

或者,对文件使用 644,对目录使用 755,对 umask 使用 022。然后组权限无关紧要,因为所有用户都获得读取权限。

后一个选项不是安全最佳实践,但它可能没问题,只要您只授予 django 用户写入权限。