【问题标题】:nginx and uwsgi very large files upload (>3Gb)nginx 和 uwsgi 非常大的文件上传 (>3Gb)
【发布时间】: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


【解决方案1】:

最终解决我的问题的是设置:

uwsgi.ini

http-timeout = 1200
socket-timeout = 1200

nginx_site.conf

proxy_read_timeout 1200;
proxy_send_timeout 1200;
client_header_timeout 1200;
client_body_timeout 1200;
uwsgi_read_timeout 20m;

在偶然发现大文件 (>1Gb) 的类似问题后,我从 github issuestackoverflow thread 以及其他几个地方收集了更多信息。最终发生的事情是 python / uwsgi 处理大文件的时间太长,并且 nginx 停止侦听 uwsgi 导致 504 错误。所以增加 http 和 socket 通信的超时时间最终解决了它。

【讨论】:

    【解决方案2】:

    我对 nginx 和 uWSGI 有类似的问题,文件大小相同,限制在 2-2.2GB 左右。 nginx 正确接受 POST 请求,当它转发请求到 uWSGI 时,uWSGI 只是在大约 18 秒后停止处理上传(零 CPU,lsof 表示 uWSGI 临时目录中的文件大小不再增加)。增加任何超时值都无济于事。

    为我解决这个问题的方法是禁用 nginx (proxy_request_buffering off;) 中的缓冲并在 uWSGI 中设置 2MB 缓冲区大小的缓冲:

    post-buffering         =  2097152
    post-buffering-bufsize =  2097152
    

    【讨论】:

      猜你喜欢
      • 2014-11-13
      • 1970-01-01
      • 2015-12-18
      • 2016-11-06
      • 2012-10-18
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多