【发布时间】:2017-02-06 06:16:42
【问题描述】:
我希望 Django 仅为登录用户提供一些媒体文件(例如用户上传的文件)。由于我的网站流量很低,我想我会保持简单,不要使用django-sendfile 告诉 Nginx 何时提供文件。相反,我会让 Django/Gunicorn 完成这项工作。对我来说,这似乎要简单得多,对于低流量网站来说,这可能更安全。
但是,组织文件存储位置的最佳方式是什么?媒体文件都存储在MEDIA_ROOT 下,该目录由 Nginx 在生产中提供服务。如果我将文件上传到MEDIA_ROOT/protected/,我必须告诉 Nginx 不要提供子目录protected 中的文件。
但这是个好主意吗?首先允许 Nginx 访问 /media/ 然后保护子目录 /media/protected/ 对我来说似乎有点冒险。不使用MEDIA_ROOT 的子目录来存储受保护的文件不是更好吗?
但是如果我在我的模型中尝试这样的快速和肮脏的东西:
upload_to='../protected/documents/%Y/%m/'
Django 抱怨:
SuspiciousFileOperation at /admin/core/document/add/
The joined path (/home/me/projects/project/protected/documents/2016/09/test.file) is located outside of the base path component (/home/me/projects/project/media)
所以我认为“离开”MEDIA_ROOT 不是一个好习惯。
存储和提供受保护媒体文件的最佳解决方案是什么?
【问题讨论】:
标签: python django python-3.x nginx nginx-location