nginx 缓存大小的含义

目录

  • 问题
  • 解决
    • proxy_buffer_size
    • proxy_buffers
    • proxy_busy_buffers_size
  • 结尾

问题

上一篇文章,我们已经介绍了解决服务器 net::ERR_CONTENT_LENGTH_MISMATCH 206 (Partial Content) 问题的方法,是通过修改 nginx 代理服务的缓存大小,具体的修改方法如下:

proxy_buffer_size 128k;

proxy_buffers 32 128k;

proxy_busy_buffers_size 128k;

很多人不禁要问,这三个配置项,它们具体都有哪些功能呢?我们今天就来揭秘一下。

解决

接下来,我们就分别分析一下。

proxy_buffer_size

proxy_buffer_size 配置项的语法如下:

proxy_buffer_size size

proxy_buffer_size 的默认值是 4k 或者 8k, 它的作用是指定 nginx 读缓存的大小。Nginx 使用 proxy_buffer_size 的大小申请相应 read_buf,即指定 upstream header 的最大长度,如果响应头超过了这个长度,nginx 会报 upstream sent too big header 的错误,然后客户端收到 502 的错误码。我们将该值调整为 128k,保证足够的读缓存大小。

proxy_buffers

proxy_buffers 配置项的语法如下:

proxy_buffers 数量 size

proxy_buffers 的默认值是 256 8k,它的作用是设置存储被代理服务器响应的 body 所占用的 buffer 个数以及每个 buffer 大小。默认值的意思是开辟了 256 个长度为 8k 大小的 read_buf 用来存储 body,但是并不是连接建立时就开辟 256 个对应的缓存,而是在当前 buffer 不够存储响应的 body 大小时才会申请一个新的 buffer,最多申请 256 个 buffer。修改后的方案,总的缓存 buffer 大小较默认值增加了一倍。

proxy_busy_buffers_size

proxy_busy_buffers_size 配置项的语法如下:

proxy_busy_buffer_size  size

proxy_busy_buffer_size 没有单独的默认值,它并不是独立的空间,其实它是 proxy_buffers 和 proxy_buffer_size 的一部分。Nginx 会在没有完全读完后端的响应数据时,就开始向客户端传送数据,所以它会划分出一部分 busy 状态的 buffer 来专门向客户端传送数据(建议为 proxy_buffers 中单个缓冲区的2倍),然后它继续从后端取数据。proxy_busy_buffer_size 参数用来设置处于 busy 状态的 buffer 大小的参数。如果完整数据大小小于 busy_buffer 大小,当数据传输完成后,马上传给客户端;如果完整数据大小不小于 busy_buffer 大小,则装满 busy_buffer 后,马上传给客户端。

结尾

好了,今天关于 nginx 的三个缓存配置项(proxy_buffer_size、proxy_buffers、proxy_busy_buffers_size)的作用就介绍完了。相信大家即使没有完全理解,也多少也所收获。



作者简介:大家好,我是 liuzhen007,是一位音视频技术爱好者,同时也是CSDN博客专家、华为云享专家、InfoQ 签约作者,欢迎关注我分享更多干货!


上一篇:Golang Gin 框架入门介绍(二)


下一篇:解决问题:net::ERR_CONTENT_LENGTH_MISMATCH 206 (Partial Content)