【发布时间】:2016-01-29 18:05:20
【问题描述】:
也许有人知道该怎么做。我正在尝试上传大于 3Gb 的文件。没问题,如果我使用下一个配置上传高达 2Gb 的文件:
Nginx:
client_max_body_size 5g;
client_body_in_file_only clean;
client_body_buffer_size 256K;
proxy_read_timeout 1200;
keepalive_timeout 30;
uwsgi_read_timeout 30m;
UWSGI 选项:
harakiri 60
harakiri 1800
socket-timeout 1800
chunked-input-timeout 1800
http-timeout 1800
当我上传大(几乎 4Gb)文件时,它会上传 ~ 2-2.2Gb 并因错误而停止:
[uwsgi-body-read] Timeout reading 4096 bytes. Content-Length: 3763798089 consumed: 2147479552 left: 1616318537
我应该使用哪些参数?
【问题讨论】:
-
在定期上传大文件时尽量避免后端处理:coderwall.com/p/swgfvw/…
-
文章不错,但我不能使用那种方法,因为我需要上传到服务器,例如照片。然后我必须将这张照片传递给 uwsgi 进行转换(例如,从 gif 到 png)。我需要对上传的文件进行操作,这是问题
-
要进一步传递请求,您可以使用 proxy_pass 指令,该指令在文件上传到文件系统后调用。临时文件名可通过 Nginx 变量访问。
-
好的,翻译:我用“client_body_in_file_only”尝试了这个方法,但没有成功。首先,我的 nginx 将上传的整个文件保存到例如/tmp/0000042(它是 3.6 Gb)。然后我的后端(uwsgi)开始将此文件复制到/tmp/0000043,并复制为进程长60秒。机器无法在 60 秒内完全复制所有文件,只有 2.1 Gb。最后在浏览器中出现“504 Gateway Time-out”错误
-
你找到解决办法了吗?
标签: file-upload nginx upload uwsgi