深入浅出 -- 系统架构之负载均衡Nginx缓冲区

一、Nginx缓冲区

先来思考一个问题,接入Nginx的项目一般请求流程为:"客户端→Nginx→服务端",在这个过程中存在两个连接:"客户端→Nginx、Nginx→服务端",那么两个不同的连接速度不一致,就会影响用户的体验(比如浏览器的加载速度跟不上服务端的响应速度)。

其实也就类似电脑的内存跟不上CPU速度,所以对于用户造成的体验感极差,因此在CPU设计时都会加入三级高速缓冲区,用于缓解CPU和内存速率不一致的矛盾。在Nginx也同样存在缓冲区的机制,主要目的就在于:用来解决两个连接之间速度不匹配造成的问题 ,有了缓冲后,Nginx代理可暂存后端的响应,然后按需供给数据给客户端。先来看看一些关于缓冲区的配置项:

  • proxy_buffering:是否启用缓冲机制,默认为on关闭状态。
  • client_body_buffer_size:设置缓冲客户端请求数据的内存大小。
  • proxy_buffers:为每个请求/连接设置缓冲区的数量和大小,默认4 4k/8k。
  • proxy_buffer_size:设置用于存储响应头的缓冲区大小。
  • proxy_busy_buffers_size:在后端数据没有完全接收完成时,Nginx可以将busy状态的缓冲返回给客户端,该参数用来设置busy状态的buffer具体有多大,默认为proxy_buffer_size*2。
  • proxy_temp_path:当内存缓冲区存满时,可以将数据临时存放到磁盘,该参数是设置存储缓冲数据的目录。
    • 语法:proxy_temp_path path;
      • path是临时目录的路径。
  • proxy_temp_file_write_size:设置每次写数据到临时文件的大小限制。
  • proxy_max_temp_file_size:设置临时的缓冲目录中允许存储的最大容量。
  • 非缓冲参数项:
    • proxy_connect_timeout:设置与后端服务器建立连接时的超时时间。
    • proxy_read_timeout:设置从后端服务器读取响应数据的超时时间。
    • proxy_send_timeout:设置向后端服务器传输请求数据的超时时间。

具体的nginx.conf配置如下:

bash 复制代码
http{
    proxy_connect_timeout 10;
    proxy_read_timeout 120;
    proxy_send_timeout 10;
    proxy_buffering on;
    client_body_buffer_size 512k;
    proxy_buffers 4 64k;
    proxy_buffer_size 16k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_temp_path /soft/nginx/temp_buffer;
}

上述的缓冲区参数,是基于每个请求分配的空间,而并不是所有请求的共享空间。当然,具体的参数值还需要根据业务去决定,要综合考虑机器的内存以及每个请求的平均数据大小。

最后提一嘴:使用缓冲也可以减少即时传输带来的带宽消耗。

相关推荐
春天花会开1312 小时前
内网 HTTPS 部署实战:私有 CA + Nginx 反向代理全流程复盘
运维·nginx·https
还是大剑师兰特6 天前
解决nginx错误:http://localhost:7000正常,http://localhost:7000/map 报错404
nginx·大剑师
xing-xing6 天前
Docker容器中Nginx站点根目录网页配置访问
nginx·docker
Cicada1286 天前
库存消息消费的正确性设计——从幂等窗口到批量流水线
分布式·系统架构
彧azz6 天前
操作系统时间管理与系统核心板块学习总结
c语言·笔记·学习·系统架构
PC2005-cloud6 天前
Nginx 防盗链配置实战:用 referer 模块保护网站静态资源
nginx
PHP实战开发录6 天前
Nginx上传大文件为什么报413
nginx·php·开发
风123456789~6 天前
【架构专栏】第15章 面向服务架构设计 2/3
系统架构
风123456789~6 天前
【架构专栏】第15章 面向服务架构设计 1/3
系统架构
智慧物业老杨6 天前
物业日常巡查的数智化重构:从“打卡式巡检“到“闭环式风控“
android·java·人工智能·系统架构·rxjava