我正在使用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左右)。任何人都知道为什么较大的媒体文件可能会触发问题,以及我应该如何解决它?
我必须在client_max_body_size
中将100M
设置为nginx.conf
,如果这是有用的话。
答案 0 :(得分:7)
我刚刚遇到了同样的问题。谢谢你的SO线程,否则我仍然会在错误的地方搜索。
要解决此问题,只要您在上传文件时遇到此错误,实际上不需要设置DATA_UPLOAD_MAX_MEMORY_SIZE
。 Django documentation链接到另一个值FILE_UPLOAD_MAX_MEMORY_SIZE
,here。
将FILE_UPLOAD_MAX_MEMORY_SIZE
设置为settings.py
的更高限制可以解决问题,以及client_max_body_size
中提到的nginx.conf
。
这会将上传最大值设置为大约200 MB
:
FILE_UPLOAD_MAX_MEMORY_SIZE = 200000000
答案 1 :(得分:3)
较大的文件(>2.5M)使用临时文件存储,默认情况下将获得 0o600 权限。通过将值设置为 FILE_UPLOAD_PERMISSIONS
可以轻松解决该问题在 settings.py 中设置
FILE_UPLOAD_PERMISSIONS = 0o644