【发布时间】:2017-11-29 22:56:32
【问题描述】:
我正在使用 Nginx 和 Gunicorn 运行托管在 DigitalOcean 上的 Django 服务器。当我遇到 403 错误时,我尝试通过管理界面添加 2MB 图片。查看error.log 表明权限被拒绝,如下:
2017/06/27 01:03:29 [error] 1643#1643: *30 open() "/home/brian/nydkc11/nydkc11/nydkcd11/media/image_main/dtc1.jpg" failed (13: Permission denied), client: 108.29.217.25, server: nydkc11.org, request: "GET /media/image_main/dtc1.jpg HTTP/1.1", host: "nydkc11.org", referrer: "http://nydkc11.org/admin/blog/image/7/change/"
然而,最奇怪的是,较小的图像文件也能正常工作(大约 18 kb 左右)。任何人都知道为什么较大的媒体文件可能会触发问题,以及我应该如何解决它?
我必须在我的nginx.conf 中将client_max_body_size 设置为100M,如果这对了解有用的话。
【问题讨论】:
-
有一个 django 默认设置会导致大于 2.5 Mb 的文件流式传输到临时文件夹(而不是在内存中处理它们)。这可能是您的问题的原因。您的文件到底有多大,在您上传的大约 1-2 Mb 的文件中会发生什么?
-
3MB。我没有上传 1 ~ 2MB 大小的文件,但 KB 范围内的文件可以正常工作。有什么办法可以更改默认设置?
-
设置为DATA_UPLOAD_MAX_MEMORY_SIZE,默认值为2621440(即2.5Mb)。因此,如果您想将其调整为 10Mb,只需乘以 4。这适用于我部署到 Heroku 的项目。
-
这无法解决问题。但最奇怪的是,在
runserver下上传相同的文件效果很好。