Nginx代理缓冲proxy buffer参数总结

TrumanWong
4/1/2023
TrumanWong

proxy_buffering

启用或禁用来自代理服务器的响应缓冲。

语法:	proxy_buffering on | off;
默认值: proxy_buffering on;
指令生效范围: http, server, location

启用缓冲后,nginx 会尽快收到来自代理服务器的响应,并将其保存到由 proxy_buffer_sizeproxy_buffers指令设置的缓冲区中。如果整个响应不适合内存,则可以将其中一部分保存到磁盘上的临时文件中。写入临时文件由 proxy_max_temp_file_sizeproxy_temp_file_write_size指令控制。

当禁用缓冲时,nginx会在接收到响应时立即同步传递给客户端。nginx 不会尝试从代理服务器读取整个响应。nginx 一次可以从服务器接收的数据的最大大小由proxy_buffer_size指令控制。

代理服务器还可以通过在X-Accel-Buffering响应标头字段中 传递yesno来启用/禁用缓冲,前提是nginx没有设置proxy_ignore_headers X-Accel-Buffering 指令禁用此功能 。

对于长轮询(Long-Polling,也有人称作Comet、反向AJAX)、Server-Sent Events这类应用来说,关闭proxy_buffering是十分有必要的,不然异步响应将会被缓存而导致这类应用无法工作。

无论proxy_buffering是否开启,proxy_buffer_size都是生效的

proxy_buffers

语法:	proxy_buffers number size;
默认值: proxy_buffers 8 4k|8k;
指令生效范围:	http, server, location

设置缓冲区的大小和数量。默认情况下,一个缓冲区大小size等于内存页大小,可能是4K也可能是8k。proxy_buffers由缓冲区数量number和缓冲区大小size组成的。总的大小为number*size

如果某些请求响应过大,这时超出proxy_buffers的部分将被缓冲到硬盘(缓冲目录由proxy_temp_path指令决定),当然这将会使读取响应的速度变慢,影响用户体验,可以使用proxy_max_temp_file_size指令关闭磁盘缓冲。

proxy_buffer_size

语法:	proxy_buffer_size size;
默认值: proxy_buffer_size 4k|8k;
指令生效范围: http, server,location

设置响应头的缓冲区大小。因为只是响应头的缓冲区,因此没必要设置太大。设置4k或8k取决于操作系统。无论proxy_buffering是否开启,proxy_buffer_size都是工作的。

proxy_busy_buffers_size

语法:	proxy_busy_buffers_size size;
默认值: proxy_busy_buffers_size 8k|16k;
指令生效范围:	http, server, location

proxy_busy_buffers_size不是独立的空间,他是proxy_buffersproxy_buffer_size的一部分。nginx会在没有完全读完后端响应的时候就开始向客户端传送数据,所以它会划出一部分缓冲区来专门向客户端传送数据(这部分的大小是由proxy_busy_buffers_size来控制的,建议为proxy_buffers中单个缓冲区大小的2倍),然后它继续从后端取数据,缓冲区满了之后就写到磁盘的临时文件中。

proxy_temp_path

语法:	proxy_temp_path path [level1 [level2 [level3]]];
默认值: proxy_temp_path proxy_temp;
指令生效范围: http, server, location

定义用于存储临时文件的目录,其中包含从代理服务器接收到的数据。 指定目录下最多可以使用三级子目录层次结构。 参考配置如下:

proxy_temp_path /spool/nginx/proxy_temp 1 2;

临时文件可能像这样:

/spool/nginx/proxy_temp/7/45/00000123457

这里的level1,2,3如果有值就代表存在一级,二级,三级子目录。目录名是由数字进行命名的,所以这里的具体的值就是代表目录名的数字位数。

proxy_max_temp_file_size

语法:	proxy_max_temp_file_size size;
默认值: proxy_max_temp_file_size 1024m;
指令生效范围:	http, server, location

设置临时文件的最大值。如果超过了这个值, Nginx将与代理服务器同步地传递内容,而不再缓冲到硬盘。设置为0时,则直接关闭硬盘缓冲。

proxy_temp_file_write_size

语法:	proxy_temp_file_write_size size;
默认值: proxy_temp_file_write_size 8k|16k;
指令生效范围: http, server, location

设置一次访问能写入的临时文件的大小。默认是proxy_buffer_sizeproxy_buffers中设置的缓冲区大小的2倍。