proxy_buffers详解

一、proxy_buffers介绍
在使用Nginx作为反向代理服务器时,我们需要缓存代理服务器返回的数据,以便后续快速响应客户端请求。proxy_buffers就是Nginx提供的一个缓存设置指令。
proxy_buffers的作用是设置代理响应缓存的大小和数量。当代理响应不适合直接从代理服务器返回时,Nginx会将响应数据缓存在proxy_buffers指定的缓存区中,然后再逐段向客户端传输。
二、proxy_buffer设置
1. proxy_buffers
proxy_buffers指令指定用于缓存响应数据段的缓存区的数量和大小。其语法如下:
proxy_buffers number size;
number:指定缓存区的数量,通常设置为客户端需要展示的页面最大字节数除以缓存区大小。
size:指定每个缓存区的大小,建议设置为4k-16k之间。当接收到的数据超过缓存区大小时,Nginx将缓存响应的前size字节,并将数据段放入剩余缓存区中。
代码示例:
proxy_buffers 4 16k;
2. proxy_buffer
proxy_buffer指令设置一个缓存区的大小。当响应的数据段超过缓存区大小时,该数据段将被分成多个缓存区并缓存。
语法如下:
proxy_buffer_size size;
代码示例:
proxy_buffer_size 8k;
3. proxy_buffering off
proxy_buffering off指令禁用缓存功能。当该指令为on时,即默认使用缓存功能。
代码示例:
proxy_buffering off;
三、proxy_buffers缓冲
1. proxy_buffers缓冲作用
proxy_buffers缓冲可避免反向代理服务器到客户端的TCP流被割裂,从而导致缓慢的页面加载。
例如,如果代理服务器收到一个响应,该响应是缺乏完整正文的。Nginx会不断等待完整的报文头。此时,如果发现响应超过缓存区的大小,会将响应拆分成两个缓存区逐段发送,以保证整个网页被客户端正确地处理。
2. proxy_buffers缓冲影响
设置较小的proxy_buffers size可以导致Nginx请求会被分段发送至反向代理服务器。这会增加源服务器的负载和请求次数,并降低整个系统的吞吐量。
例如,如果size设置得较小,则会使Nginx频繁地请求源服务器以获得完整的响应。然而,如果size设置太大,则缓存区很可能被连续的小响应数据段占满并失去作用。
3. proxy_buffers chunked
在基于HTTP chunked传输编码的响应中,源服务器会发送多个大小不同的数据块,每个数据块都包含一个数据和其大小标记。Nginx将支持chunked的响应分隔成小块,存储在proxy_buffers缓存区中。
例如,设计的网页需要源服务器按顺序返回各个部分,该网页中的代码可能被映射到不同的后端服务器。在这种情况下,反向代理服务器必须将数据缓冲区适当地更改为允许足够的响应缓冲区。
4. proxy_buffer overflow
如果反向代理服务器的响应超过proxy_buffers缓存区的总大小,则会触发proxy_buffer overflow错误。这可能会导致整个系统崩溃。
为了防止这种情况的发生,可以使用proxy_max_temp_file_size指令限制缓存空间,或使响应数据更换为压缩编码,从而减少缓存区占用。
四、总结
proxy_buffers是Nginx反向代理服务器的重要指令。通过良好的代理缓存管理,可以显著提高响应速度和系统吞吐量。在设置proxy_buffers前,建议先了解网络需求,合理设置缓存区大小和数量,避免出现缓冲溢出,并保证系统的健壮性。