详解Nginx启用proxy_buffer缓冲
顾名思义,proxy_buffer是用于proxy模式的缓冲功能。本文介绍其基本用法。
buffer是什么
buffer,即缓冲区,它在Nginx上发挥的作用就是启用一个缓冲区,先在这个缓冲区内进行存储,再把数据发送出去。和在线观看视频有点类似,先把视频文件缓冲一部分到本地再开始播放。
若没有buffer,数据将会直接从Nginx传输到客户端。假设如果客户端的加载速度足够快,你可以直接把buffer关掉,让数据尽可能快地到达客户端。
而使用buffer,Nginx将会临时存储后端response到缓冲区,然后慢慢把数据发送到客户端。启用buffer的好处在于可以把数据一次性地发送给目标,相较于即时传输可以节约出这部分带宽。
顺带一提,Nginx全局配置中的tcp_nopush的作用就是数据包会累计到一定大小之后才会发送。而tcp_nodelay是尽快发送数据,所以若你启用了buffer,建议关闭tcp_nodelay。
下面总结下nginxbuffer设置:
proxy_buffer_size4k; proxy_bufferingon; proxy_buffers44k; proxy_busy_buffers_size8k; proxy_max_temp_file_size1024m;
首先,这些参数都是针对每一个httprequest,不是全局的。
proxy_buffer的配置
proxy_buffer是用于proxy模式(一般也可称为反向代理)的buffer配置。Nginx有另外一种适用于server模式的buffer配置,这里本帖不做介绍。
proxy_buffer包括了以下配置项:
需注意,以下指定的数值都是针对每一个httprequest的上限,而不是对于整个buffer区指定的上限。
proxy_buffering
proxy_bufferingon;
在proxy_buffering开启的时候,proxy_buffers和proxy_busy_buffers_size才会起作用。
proxy_buffers
proxy_buffers48k;
指定一个request的buffer的数量和大小。
proxy_buffer_size
proxy_buffer_size4k;
指定后端response的buffer的大小。它是来自后端response的一部分,它包含Headers,从response分离出来。它仅用于限定headers的buffer区,所以它的值比proxy_buffers更低。
proxy_buffer_size有一点特殊在于,无论proxy_buffering是否开启,proxy_buffer_size都会起作用。
proxy_busy_buffers_size
proxy_busy_buffers_size12k;
忙时buffer的最大值。一个客户端一次只能从一个buffer中读取数据的同时,剩下的buffer会被放到队列中,等待发送到客户端,这个directive指定在这个状态下的buffer的大小。
①如果proxy_buffers关闭
Nginx不会尝试获取到后端服务器所有响应数据之后才返回给客户端,Nginx会尽快把数据传给客户端,在数据传完之前,Nginx接收到的最大缓存大小不能超过proxy_buffer_size。
②如果proxy_buffers打开
Nginx将会尽可能的读取后端服务器的数据到buffer,直到proxy_buffers设置的所有buffer们被写满或者数据被读取完(EOF),此时Nginx开始向客户端传输数据,会同时传输这一整串buffer们。如果数据很大的话,Nginx会接收并把他们写入到temp_file里去,大小由proxy_max_temp_file_size控制。「当数据没有完全读完的时候」,Nginx同时向客户端传送的buffer大小不能超过proxy_busy_buffers_size「此句可能理解有误」。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。