Nginx缓冲区

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

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

关于缓冲区的配置项:
proxy_buffering:是否启用缓冲机制,默认为关闭[off]状态。
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 300;  
    proxy_read_timeout 120;  
    proxy_send_timeout 300;  
    proxy_buffering on;  
    client_body_buffer_size 512k;  
    proxy_buffers 16 1024k;  
    proxy_buffer_size 1024k;  
    proxy_busy_buffers_size 2048k;  
    proxy_temp_file_write_size 2048k;  
    proxy_temp_path /data/services/nginx/temp_buffer ;  
}

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

由于Nginx缓存问题导致的错误:

NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)

错误背景:
微服务不通过统一的nginx端口访问,能够正常请求接口并获取对应的响应。
但是通过nginx的话,则出现请求通(也就是响应200),但始终没有得到正确的响应,提示上述错误 NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)。

解决办法:
在Nginx中的对应的反向代理配置如下内容,即可解决:

proxy_buffer_size 1024k;
proxy_buffers 16 1024k;
proxy_busy_buffers_size 2048k;
proxy_temp_file_write_size 2048k;

错误原因分析:
1.nginx配置缓存区设置过小
2.nginx的临时目录(/proxy_temp)过大或没有权限写入缓存文件
3.磁盘空间不足

nginx的缓冲区作用
如果客户端到nginx速度快,nginx到服务器速度慢,没有缓冲区,一点点数据量就直接发到客户端,十分浪费性能。
有了缓冲区,积累到一定量,再传输到客户端,减少了Tcp请求。
相反,客户端到nginx速度慢,nginx到服务器速度快,没有缓冲区,
nginx到服务器的连接就会一直保持在那边,直到客户端接受完毕。
有了缓冲区,返回内容放到缓冲区后,nginx到服务器的连接就能断开了,客户端从缓冲区拉取即可。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值