Nginx proxy buffer设计原理
一、缓冲功能概述
1、数据暂存
Nginx 的 proxy buffer 主要用于在代理请求时,对从后端服务器(upstream server)获取的数据进行暂存。这一功能有助于平滑网络波动带来的影响。例如,当后端服务器响应速度较快,但客户端网络状况不佳时,缓冲区可以先存储数据,然后按照客户端能够接受的速度发送数据。
对于异步的网络交互场景,缓冲区提供了一个临时的数据存储位置。在代理过程中,Nginx 可以先将后端服务器的响应数据接收并存储在缓冲区中,同时继续处理其他请求或者进行一些预处理操作,如数据的解压、解密等。
2、流量控制
它可以对上下游的数据流量进行控制。对于后端服务器而言,Nginx 的 proxy buffer 可以避免因客户端接收速度过慢而导致后端服务器连接被长时间占用的情况。当客户端接收能力有限时,Nginx 可以从缓冲区中按照客户端的接收能力逐步发送数据,而后端服务器可以继续处理其他请求。
从客户端的角度看,Nginx 可以通过缓冲区来限制数据的发送速率,防止大量数据瞬间涌向客户端而造成客户端的接收压力过大,例如,通过设置合适的缓冲区大小和发送速率限制,确保客户端能够稳定地接收数据。
二、proxy buffer 配置讲解
指令 |
值 |
详情 |
proxy_buffering |
on | off |
是否启用Proxy Buffer功能,默认为on(开启状态) |
proxy_buffers |
number size |
接收一次被代理服务器响应数据的Proxy Buffer个数和每个Buffer的大小。number=Proxy Bufferr的个数,size=每个Buffer的大小,如:proxy_buffers 8 4k |
proxy_buffer_size |
size |
从被代理服务器获取的第一部分响应数据的大小,该数据中一般包含了HTTP响应头,Nginx服务器通过它来获取响应数据和被代理服务器的一些必要的信息。size=缓存大小,如:proxy_buffer_size 8k; |
proxy_busy_buffers_size |
size |
当启用来自代理服务器的响应缓冲时,会限制在响应尚未完全读取时可能忙于向客户端发送响应的缓冲区的总大小。与此同时,其余的缓冲区可用于读取响应,并在需要时将部分响应缓冲到临时文件中。默认情况下,大小受proxy_buffer_size和proxy_bBuffers指令设置的两个缓冲区的大小限制。 |
proxy_temp_path |
path [level1 [level2 [level3]]] |
配置磁盘上的一个文件路径,该文件用于临时存放代理服务器的大体积响应数据,path=磁盘上存放临时文件的路径,levelN=在path变量设置的路径下第几级hash目录中存放临时文件,如:proxy_temp_path /tmp/nginx/proxy_temp 1 2,临时文件路径是/tmp/nginx/proxy_temp/1/10/00000100101 |
proxy_max_temp_file_size |
size |
用于配置所有临时文件的总体积大小,存放在磁盘上的临时文件大小不能超过该配置值。size=设置临时文件总体积的上限,默认为1024MB |
proxy_temp_file_write_size |
size |
用于配置同时写入临时文件的数据量的总大小,合理设置可以避免磁盘IO负载过重,size=同时写入临时文件的数据量总大小 |
语法: |
proxy_buffering on | off; |
默认值: |
proxy_buffering on; |
上下文: |
http, server, location |
启用或禁用来自代理服务器的响应缓冲。启用缓冲后,nginx会尽快从代理服务器接收响应,并将其保存到proxy_buffer_size和proxy_bBuffers指令设置的缓冲区中。如果整个响应不适合内存,可以将其一部分保存到磁盘上的临时文件中。写入临时文件由proxy_max_temp_file_size和proxy_temp_file_write_size指令控制。当缓冲被禁用时,响应会在收到后立即同步传递给客户端。nginx不会尝试从代理服务器读取整个响应。nginx一次可以从服务器接收的最大数据大小由proxy_buffer_size指令设置。