繁体   English   中英

使用Nginx / Gunicorn上传Django文件-媒体权限

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM