Http nginx代理请求缓冲未按预期工作
这是我的nginx配置:Http nginx代理请求缓冲未按预期工作,http,nginx,file-upload,upload,tornado,Http,Nginx,File Upload,Upload,Tornado,这是我的nginx配置: worker_processes auto; user nginx; events { worker_connections 1024; use epoll; } http { tcp_nodelay on; add_header Cache-Control no-cache; upstream servers { server 127.0.0.1
worker_processes auto;
user nginx;
events {
worker_connections 1024;
use epoll;
}
http {
tcp_nodelay on;
add_header Cache-Control no-cache;
upstream servers {
server 127.0.0.1:9999;
server 127.0.0.1:9998;
}
proxy_request_buffering on;
server {
listen 80;
client_max_body_size 200M;
client_body_buffer_size 200M;
server_name localhost;
location / {
try_files $uri @proxy_upload;
}
location @proxy_upload {
proxy_pass_request_body on;
proxy_pass http://servers;
}
}
}
我尝试上传文件,我正在做一些类似分块上传的事情,文件超过2G,客户端分块发送文件,nginx和脚本正在工作,但nginx没有按预期工作
你看,我打开了proxy\u request\u buffering,所以我希望nginx缓冲所有200M的文件,然后立即将其传递给后端(tornado python),但nginx将其以1M或2M的块传递给后端,这种行为会导致非常高的cpu使用率、更高的系统负载和更低的上传速度,这种行为与将proxy\u request\u buffering设置为off没有太大区别,所以我认为我在这里做错了什么
为什么nginx不能正确缓冲,我应该如何让nginx缓冲整个请求,然后立即传递它
我尝试使用post_操作,但无法将请求正文传递到后端
更新:Nginx缓冲正确,我的意思是,客户端上传整个文件后,Nginx会立即将请求体传递到后端,但Nginx会将请求体以较小的块传递到后端,不会一次传递,它有整个体,但不会一次传递整个体,如何告诉nginx立即将请求正文传递到后端?看起来您需要打开
代理缓冲
,设置代理缓冲
来设置缓冲区的数量和大小,可能还需要代理缓冲
来确保它不会过度使用内存:
location @proxy_upload {
proxy_buffering on;
proxy_buffers 10 200m;
proxy_buffer_size 1000m;
proxy_pass_request_body on;
proxy_pass http://servers;
}
不知道你的上游服务器得到多少流量,但我可以想象这么大的缓冲区并没有那么有效。。。您使用的上游Web服务器需要如此大的缓冲区?也许可以尝试一次增加1米的缓冲区,直到达到一个合适的最佳点
发件人:
而且:看起来您需要打开
代理缓冲
,设置代理缓冲
以设置缓冲区的数量和大小,可能还需要设置代理缓冲
以确保不会过度使用内存:
location @proxy_upload {
proxy_buffering on;
proxy_buffers 10 200m;
proxy_buffer_size 1000m;
proxy_pass_request_body on;
proxy_pass http://servers;
}
不知道你的上游服务器得到多少流量,但我可以想象这么大的缓冲区并没有那么有效。。。您使用的上游Web服务器需要如此大的缓冲区?也许可以尝试一次增加1米的缓冲区,直到达到一个合适的最佳点
发件人:
而且:谢谢您的回复,但我不认为proxy_buffers是这里的答案,我用您提供的配置测试了很多,但我认为它更多地与对客户端的后端响应有关,无论哪种方式,结果都没有变化,正如我所说,我认为proxy_buffers是关于响应的,我需要改变RequestsHanks的行为以获得您的回复,但我不认为proxy_buffers是这里的答案,我用您提供的配置进行了很多测试,但我认为它更与客户端的后端响应相关,不管怎样,结果都没有变化,正如我所说的,我认为代理缓冲区是关于响应的,我需要改变请求的行为