gpt4 book ai didi

python - 使用 nginx/gunicorn 上传 Django 文件 - 媒体权限

转载 作者:行者123 更新时间:2023-11-28 21:53:47 38 4
gpt4 key购买 nike

我试图让我的 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 -rwww-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

希望对您有所帮助。如果没有,请告诉我。 :)

关于python - 使用 nginx/gunicorn 上传 Django 文件 - 媒体权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25509774/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com