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



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

我正在开发一个使用 Django 创建的小型个人网站。我想把它放到网上,看看是否一切正常。我从linode得到了一个便宜的服务器,并使用Digital-Ocean的指南(具有讽刺意味)我让一切正常。我很开心。

但。。。有一个主要问题,我已经阅读了一半的互联网,找不到任何类似的问题:当发布请求大于~4MB(上传图像等)时,文件以错误的权限保存。

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

禁止文件的权限: -rw------- 1 [用户] 根 7900880 五月 12 08:24 文件名1.pdf

工作文件的权限: -rw-r--r-- 1 [用户] 根 207420 五月 11 19:36 文件名2.jpg

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

我厌倦了这个问题。这听起来很不合逻辑;文件大小与权限有什么关系!?事实上,我对此缺乏任何经验,但这并不能使解决它变得更容易。如果这里有人有黄金提示,我会非常感谢:)


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

在自己与这个问题作斗争之后,我想通了。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

最新更新