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 用户写入权限。
我在 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 用户写入权限。