【问题标题】:Django server error 403 forbidden nginx/1.10.3 (ubuntu)Django 服务器错误 403 禁止使用 nginx/1.10.3 (ubuntu)
【发布时间】:2018-05-15 10:53:18
【问题描述】:

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

如何正确检索所有内容? 我不熟悉 Ubuntu

我用这个 sn-p 来恢复文件。但是,它只工作一次。一段时间后,它显示相同的错误。

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

【问题讨论】:

  • 您是如何尝试访问这些文件的?通过 HTTP 方法?你在运行 curl 吗?
  • 我正在使用 Https。 r&w 禁用组权限
  • 您的 nginx 服务器是否有阻止您的 IP 访问端点的黑名单?查看您的 nginx 配置并在服务器配置下查找 deny all

标签: django nginx ubuntu-server


【解决方案1】:

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

【讨论】:

  • 如何启用群组权限?
  • 一个文件有一个组和一个用户所有者。使用ls -la 进行调查。请记住,nginx 还需要所有父目录的读取+执行权限才能读取文件。
猜你喜欢
  • 2017-12-05
  • 1970-01-01
  • 2016-07-18
  • 2018-07-24
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-02
相关资源
最近更新 更多