运行nginx的django服务器上的大型媒体文件出现403错误

时间:2017-06-27 01:13:44

标签: django nginx gunicorn

我正在使用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,如果这是有用的话。

2 个答案:

答案 0 :(得分:7)

我刚刚遇到了同样的问题。谢谢你的SO线程,否则我仍然会在错误的地方搜索。

要解决此问题,只要您在上传文件时遇到此错误,实际上需要设置DATA_UPLOAD_MAX_MEMORY_SIZEDjango documentation链接到另一个值FILE_UPLOAD_MAX_MEMORY_SIZEhere

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

Reference

See For Python2

See Documentation