nginx 和 uwsgi 非常大的文件上传(>3Gb)

Art*_*ult 5 upload file-upload nginx uwsgi

也许有人知道该怎么做。我正在尝试上传大于 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;
Run Code Online (Sandbox Code Playgroud)

UWSGI 选项:

harakiri 60
harakiri 1800
socket-timeout 1800
chunked-input-timeout 1800
http-timeout 1800
Run Code Online (Sandbox Code Playgroud)

当我上传大(几乎 4Gb)文件时,它上传 ~ 2-2.2Gb 并停止并出现错误:

[uwsgi-body-read] Timeout reading 4096 bytes. Content-Length: 3763798089 consumed: 2147479552 left: 1616318537
Run Code Online (Sandbox Code Playgroud)

我应该使用哪些参数?

phi*_*web 1

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

uwsgi.ini

http-timeout = 1200
socket-timeout = 1200
Run Code Online (Sandbox Code Playgroud)

nginx_site.conf

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

Run Code Online (Sandbox Code Playgroud)

在偶然发现大文件(> 1Gb)的类似问题后,我从github 问题stackoverflow 线程等收集了更多信息。最终发生的情况是 python / uwsgi 处理大文件花费的时间太长,并且 nginx 停止监听 uwsgi 导致 504 错误。因此增加http和socket通信的超时时间最终解决了这个问题。