这是我的nginx配置:
.map((jobs: Job[]) =>
jobs.filter((job: Job) => job.employer === data.uid || job.employee === data.uid )
);
我尝试上传文件,我正在做类似上传的文件,文件超过2G,客户端以块的形式发送文件,nginx和脚本正在运行,但是nginx没有按预期工作
你看,我把proxy_request_buffering打开了,所以我希望nginx缓冲所有200M的文件,然后立即将它传递给后端(这是tornado-python),但是nginx将它传递到1M或2M的后端块,这种行为会导致更高的CPU使用率,更高的系统负载和更低的上传速度,这种行为与将proxy_request_buffering设置为off没有多大区别,所以我觉得我在这里做错了什么
为什么nginx没有正确缓冲?我想如何让nginx缓冲整个请求然后立即传递它?
我尝试使用post_action,但我无法将请求正文传递给后端
更新:Nginx正确缓冲,我的意思是它会在客户端上传整个文件后立即将请求体传递给后端,但是Nginx会将请求体传递给较小块的后端,并且它不会立即传递给它,它有整个身体但它不会立刻通过全身,我怎么能告诉nginx立即将请求体传递给后端?
答案 0 :(得分:0)
看起来您需要打开proxy_buffering
,设置proxy_buffers
以设置缓冲区的数量和大小,并可能proxy_buffers_size
以确保它不会过度使用内存:
location @proxy_upload {
proxy_buffering on;
proxy_buffers 10 200m;
proxy_buffer_size 1000m;
proxy_pass_request_body on;
proxy_pass http://servers;
}
不确定您的上游服务器获得了多少流量,但我可以想象这个大的缓冲区效率不高......您在上游使用哪种网络服务器需要如此大的缓冲区?也许尝试一次递增缓冲区1m,直到它处于一个不错的最佳位置。
来自:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffers
并且:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffer_size