sou*_*eux 3 python django nginx gunicorn
我正在尝试允许我的 django 站点的用户通过模型上的 FileField 将文件(主要是 PDF)上传到我的服务器。但是,在尝试使用模型表单生成的上传字段时,我一直遇到“Errno 13 Permission Denied”。
我在四处寻找时找到了许多潜在的解决方案,但到目前为止还没有任何东西可以正常工作。这是我第一次真正的部署,我可能把自己弄糊涂了。作为参考,我使用的是 Ubuntu 14.04、Django 1.6 和 gunicorn+nginx。
现在,我的媒体根目录位于我的项目目录中:
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(BASE_DIR, "media/uploads")
Run Code Online (Sandbox Code Playgroud)
该错误表明正确的目录存在问题,因此它会出现在正确的位置。
我已经尝试到chown -r媒体目录www-data:www-data,但没有成功。我四处寻找,找出运行 python 进程的用户,并尝试将“他”设置为所有者 - 没有用。我将其翻转回其原始所有者和组 ( root:root) 并尝试chmod -r使用 755 和 770,这两个都未能解决问题。
如果我chmod -r选择 777,那么一切都“有效”——但这不是我想因为显而易见的原因而暴露的事情。
我的静态文件正在从我的项目根目录 (/var/www/mysite/static) 之外的目录中收集和正确提供,因此我尝试将媒体文件夹移到那里并重复上述所有步骤 - 结果相同。
我怎样才能让我的媒体文件夹安全地接受来自我的用户的上传和下载,而不会让这个安全漏洞大开?
谢谢!
首先,媒体文件文件夹必须在你的项目路径中,否则你会从 Django得到SuspiciousOpertion异常,所以不要把它放在/var/www 中。
此外,您使用 nginx 的事实并不是那么相关,重要的部分是 nginx/django 项目在哪个用户下运行,无论它是哪个用户(通常是www-data,至少使用apache+mod_wsgi),该用户应该成为媒体文件夹的所有者。
一旦您将所有者更改为正确的用户(我假设www-data):,请sudo chown -R www-data:www-data .../media确保权限正确:sudo chmod -R u+rwX .../media。
希望它有所帮助。如果没有,请告诉我。:)
| 归档时间: |
|
| 查看次数: |
5216 次 |
| 最近记录: |