当请求太大时,Nginx(我认为)会保存具有错误权限的文件

时间:2017-05-12 07:52:30

标签: ubuntu nginx permissions django uwsgi

所以,我对托管和Linux都是全新的,所以请原谅我,如果我说错了。我还在学习:)。

我正在使用Django创建一个小型个人网站。我想在网上看看它是否一切正常。我从linode得到了一个廉价的服务器,并使用Digital-Ocean的指南(具有讽刺意味)我把一切都搞定了。我很高兴。

但是......这是一个主要问题,我已经阅读了一半的互联网并且无法找到类似的问题:当帖子请求大于〜4MB(上传图片等)时)文件以错误的权限保存。

当请求大小小于大约4MB时,一切都可以正常运行。当请求大小更大时,所有内容都会上传并保存到服务器而不会出现任何问题,但从那时起,我无法再从浏览器访问文件,并且网站不断对这些文件进行403抛弃。这是因为文件突然以错误的权限或类似的东西保存。

禁止文件的权限: -rw ------- 1 merlijn root 7900880 May 12 08:24 filename1.pdf

工作文件的权限: -rw-r - r-- 1 merlijn root 207420 5月11日19:36 filename2.jpg

我不确定即使工作文件是否完全正确,因为我认为它不需要root。

我厌倦了这个问题。听起来很不合逻辑;什么文件大小与权限!?而且我缺乏这方面的经验这一事实并没有使解决它变得更容易。如果这里有人有金色小费,我会非常感激:)

我在 Ubuntu 17.04 上使用 Nginx uWSGI 以及 Django 1.11 应用程序。

1 个答案:

答案 0 :(得分:4)

在我自己努力解决这个问题后,我明白了。 AlexD的大文件处理方式不同是正确的。

来自Django的文档:

  

FILE_UPLOAD_PERMISSIONS

     

默认值:无

     

将新上传的文件设置为的数字模式(即0o644)。有关这些模式的含义的更多信息,请参阅os.chmod()的文档。

     

如果没有给出或者是None,您将获得与操作系统相关的行为。在大多数平台上,临时文件的模式为0o600,从内存中保存的文件将使用系统的标准umask保存。

总而言之:使用临时文件存储较大的文件,默认情况下将获得0o600权限。通过将值设置为FILE_UPLOAD_PERMISSIONS可以轻松解决问题。

https://docs.djangoproject.com/en/1.11/ref/settings/#file-upload-permissions