Nginx实现(缓冲区)

先来思考一个问题,接入Nginx的项目一般请求流程为:“客户端→Nginx→服务端”,在这个过程中存在两个连接:“客户端→NginxNginx→服务端”,那么两个不同的连接速度不一致,就会影响用户的体验(比如浏览器的加载速度跟不上服务端的响应速度)。其实也就类似电脑的内存跟不上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:当内存缓冲区存满时,可以将数据临时存放到磁盘,该参数是设置存储缓冲数据的目录。
  • 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配置如下:

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;  
}  

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

相关推荐

  1. Nginx实现缓冲区

    2023-12-07 08:56:03       57 阅读
  2. 汇编实现缓冲区溢出1

    2023-12-07 08:56:03       30 阅读
  3. 深入浅出 -- 系统架构之负载均衡Nginx缓冲区

    2023-12-07 08:56:03       35 阅读
  4. Vue 和 React 框架实现滚动缓冲区

    2023-12-07 08:56:03       25 阅读
  5. Nginx实现(负载均衡)

    2023-12-07 08:56:03       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 08:56:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 08:56:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 08:56:03       82 阅读
  4. Python语言-面向对象

    2023-12-07 08:56:03       91 阅读

热门阅读

  1. go - 计算CIDR的主机数量

    2023-12-07 08:56:03       60 阅读
  2. RefCell 数据类型

    2023-12-07 08:56:03       51 阅读
  3. Linux下打包Qt-使用linuxDeployQt+appimageTool

    2023-12-07 08:56:03       51 阅读
  4. Ubuntu下应用软件安装

    2023-12-07 08:56:03       78 阅读
  5. Ubuntu20.24 安装ecCodes,包括 tar.gz 和 python(笔记)

    2023-12-07 08:56:03       58 阅读
  6. 使用lxml解析本地html文件报错?

    2023-12-07 08:56:03       59 阅读
  7. Docker build 命令

    2023-12-07 08:56:03       50 阅读
  8. SCI论文——respectively用法

    2023-12-07 08:56:03       61 阅读
  9. 利用 Python进行数据分析实验(一)

    2023-12-07 08:56:03       57 阅读
  10. linux dpdk 介绍

    2023-12-07 08:56:03       53 阅读
  11. C语言中数组的初始化

    2023-12-07 08:56:03       63 阅读