[英]Django File Upload with nginx / gunicorn - media permissions
我正在尝试让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")
该错误表示正确的目录存在问题,因此转到正确的位置。
我试图将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
。
希望能有所帮助。 让我知道是否可以。 :)
尝试在您的nginx conf文件中增加max_body_size
:
server {
...
client_max_body_size 250M;
...
}
默认情况下,它设置为1M ,根据您要上传的内容,该值可能太小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.