Nginx支持代理响应缓冲:
proxy_buffering 指令禁用响应缓冲,而不是请求 缓冲。
截至目前,无法阻止nginx中的请求正文缓冲。 在将请求传递给nginx之前,它总是被nginx完全读取 上游服务器。它基本上是nginx作为网络的一部分 加速器 - 它自己处理与客户的慢速通信 只要求后端在一切准备就绪时处理请求。
自版本1.7.11 Nginx(2015年3月)指令 proxy_request_buffering the mailing list:
更新:在nginx 1.7.11中, proxy_request_buffering 指令是 可用,允许禁用请求主体的缓冲。它 但应谨慎使用,请参阅文档。
有关详细信息,请参阅see details:
语法:proxy_request_buffering on |关闭;
默认值:proxy_request_buffering on;
上下文:http,服务器,位置
启用缓冲后,将从中读取整个请求正文 客户端在将请求发送到代理服务器之前。
禁用缓冲时,请求正文被发送到代理 服务器立即收到。在这种情况下,请求不能 如果nginx已经开始发送,则传递给下一个服务器 请求正文。
使用HTTP / 1.1分块传输编码发送原始文件时 请求正文,请求正文将被缓冲,无论如何 指令值,除非为代理启用了HTTP / 1.1。
问题是关于Nginx(Load Balancer)的缓冲。例如,我们有以下方案:
Nginx (LB) -> Nginx (APP) -> Backend
Nginx(APP)缓冲来自负载均衡器的请求,并缓冲来自后端的响应。但是如果两个Nginx节点在物理上彼此靠近(小于2毫秒ping)并且中间网络连接相当快,那么在Nginx(LB)端缓冲请求和响应是否有意义?
我测量了以下基准 - 请注意,这只是为了说明 - 生产负荷会显着增加:
siege --concurrent = 50 --reps = 50 docs
proxy_request_buffering on;
Transactions: 2500 hits
Availability: 100.00 %
Elapsed time: 58.57 secs
Data transferred: 577.31 MB
Response time: 0.55 secs
Transaction rate: 42.68 trans/sec
Throughput: 9.86 MB/sec
Concurrency: 23.47
Successful transactions: 2500
Failed transactions: 0
Longest transaction: 2.12
Shortest transaction: 0.10
proxy_request_buffering off;
Transactions: 2500 hits
Availability: 100.00 %
Elapsed time: 57.80 secs
Data transferred: 577.31 MB
Response time: 0.53 secs
Transaction rate: 43.25 trans/sec
Throughput: 9.99 MB/sec
Concurrency: 22.75
Successful transactions: 2500
Failed transactions: 0
Longest transaction: 2.01
Shortest transaction: 0.09