Nginx代理缓冲proxy_buffering配置方式

 更新时间:2023年12月22日 15:46:13   作者:HaleyTiger  
这篇文章主要介绍了Nginx代理缓冲proxy_buffering配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

什么是代理缓冲

Nginx作为一个常用的反向代理,提供了代理缓冲的功能。

它允许nginx将server端的响应读取下来缓存在本地内存或磁盘中,再已合适的速度发送给客户端。

为什么要有代理缓冲

在互联网中,nginx作为反向代理层,往往和server是在同区机房的。

这意外这nginx和server之间的网络质量很好,nginx可以用很快的速度从server端读取响应。

但是客户端往往是用户网络,到nginx的机房网络质量不可控,肯定是要远远低于nginx到后端server的网速。

这就会带来一个问题:

因为客户端到nginx的网速过慢,导致nginx只能以一个较慢的速度将响应传给客户端;进而导致后端server也只能以同样较慢的速度传递响应给nginx,造成一次请求连接耗时过长。

在高并发的情况下,后端server可能会出现大量的连接积压,最终拖垮server端。

代理缓冲的优缺点

代理缓冲的优点

(1)开启代理缓冲后,nginx可以用较快的速度尽可能将响应体读取并缓冲到本地内存或磁盘中,然后同时根据客户端的网络质量以合适的网速将响应传递给客户端。

(2)这样既解决了server端连接过多的问题,也保证了能持续稳定的像客户端传递响应。

代理缓冲的缺点

(1)开启代理缓冲会消耗nginx服务器的内存,如果请求过多,可能会导致nginx内存消耗过大;所以缓冲区的大小设置需要根据实际的服务器配置和请求量进行评估。

(2)在响应过大的情况下,设置的缓冲区无法存下整个响应体,nginx会将剩余的内容写到磁盘临时文件中。在请求量较大的情况下,可能会导致nginx服务器磁盘io过高。而往往临时文件都存放在/tmp下,而/tmp目录一般挂载在系统盘上,系统盘io过高会进一步导致系统负载上涨。

(3)在客户端网络质量很好的情况下,比如客户端到nginx也是同机房内,这时关闭代理缓冲直接将响应实时转发给客户端效率更高。

代理缓冲的配置参数

nginx对于控制代理缓冲区,有一些常用的配置参数。这些参数都是可以作用于http块、server块或者location块中。

1. proxy_buffering

Syntax:	proxy_buffering on | off;
Default:	proxy_buffering on;
Context:	http, server, location

复制代码该参数用户控制开启或关闭代理缓冲区。

当开启代理缓冲区时,nginx会尽快的从server端读取响应并缓存在内存分配的缓冲区中。代理缓冲区的大小由proxy_buffer_size和proxy_buffers参数指定。

当响应大小超出内存缓冲区时,一部分响应体可以保存在磁盘临时文件中。磁盘临时文件的大小由proxy_max_temp_file_size和proxy_temp_file_write_size参数指定。

2. proxy_buffer_size

Syntax:	proxy_buffer_size size;
Default:	proxy_buffer_size 4k|8k;
Context:	http, server, location

复制代码该参数用于设置从server端读取初始部分响应(the first part of the response)所使用的缓存大小。这部分通常包含了一个小的response header。

通常,该缓冲区大小设置为一个内存页的大小,具体是4k或8k,取决于服务器平台。也可以把它设置的更小,但是没必要设置过大了,因为只是用于缓冲初始部分响应。

值得注意的是,proxy_buffer_size参数并不受proxy_buffering开启或关闭的影响。它始终都是生效的。

3. proxy_buffers

Syntax:	proxy_buffers number size;
Default:	proxy_buffers 8 4k|8k;
Context:	http, server, location

复制代码该参数用于设置从server端读取响应所使用的缓冲区个数和大小。通常默认情况下,单个缓冲区大小设置为一个内存页的大小,如4k或8k。

值得注意的是,这里设置的缓冲区大小是针对每个请求连接而言的。也就是说对于每一个连接,都会分配 ”number*size“大小的内存缓冲区。

另外需要注意,要根据服务器配置和请求量评估缓冲区配置大小;避免出现nginx将内存耗尽的情况。

4. proxy_busy_buffers_size

Syntax:	proxy_busy_buffers_size size;
Default:	proxy_busy_buffers_size 8k|16k;
Context:	http, server, location

复制代码该参数用于设置当还未从server端读取到完整响应时,允许开始给客户端发送响应的缓冲区大小。

在指定大小的缓冲区进入busy状态后将无法再写入,而剩余的缓冲区可以同时继续从server端读取响应,或者将响应写入磁盘临时文件。

通常该参数值设置为proxy_buffer_size和proxy_buffers中单个buffer之和,也就是单个内存页的2倍。

5. proxy_max_temp_file_size

Syntax:	proxy_max_temp_file_size size;
Default:	proxy_max_temp_file_size 1024m;
Context:	http, server, location

复制代码该参数用于设置磁盘临时文件的最大size。

当server端返回的整个响应超出proxy_buffering和proxy_buffers设置的内存缓冲区大小时,剩余的响应体可以保存在一个磁盘临时文件中。proxy_max_temp_file_size指定了该临时文件的最大大小。

而一次能写入磁盘临时文件的数据大小由proxy_temp_file_write_size参数指定。

注意,proxy_max_temp_file_size参数设置为0可以禁止将响应保存到磁盘临时文件中。

6. proxy_temp_file_write_size

Syntax:	proxy_temp_file_write_size size;
Default:	proxy_temp_file_write_size 8k|16k;
Context:	http, server, location

复制代码该参数用于设置每次写入磁盘临时文件的大小。

通常该参数值设置为proxy_buffer_size和proxy_buffers中单个buffer之和,也就是单个内存页的2倍。

代理缓冲配置样例

# 开启proxy_buffering
    proxy_buffering                 on;
    proxy_buffer_size               4k;
    proxy_buffers                   4       4k;
    proxy_busy_buffers_size         8k;
    proxy_max_temp_file_size        0;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Nginx 生产环境安全配置加固的实现

    Nginx 生产环境安全配置加固的实现

    本文主要介绍了Nginx 生产环境安全配置加固的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • zabbix自定义监控nginx状态实现过程

    zabbix自定义监控nginx状态实现过程

    这篇文章主要为大家介绍了zabbix如何自定义监控nginx状态的实现过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • nginx 常用指令 try_files allow root alias的使用

    nginx 常用指令 try_files allow root ali

    本文主要介绍了nginx 常用指令 try_files allow root alias的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • 宝塔nginx部署前端页面刷新报404错误解决办法

    宝塔nginx部署前端页面刷新报404错误解决办法

    使用nginx部署前端项目是一篇非常详细的教程,旨在帮助初学者使用Nginx来部署前端项目,这篇文章主要给大家介绍了关于宝塔nginx部署前端页面刷新报404错误的解决办法,需要的朋友可以参考下
    2024-03-03
  • Nginx 日志轮转的实现示例

    Nginx 日志轮转的实现示例

    Nginx日志轮转是监控和调试Web服务器的重要工具,通过定期归档、压缩和清理日志文件,可以节省磁盘空间、提高性能并方便故障排查,下面就来介绍一下
    2024-12-12
  • 一次nginx崩溃事件的实战记录

    一次nginx崩溃事件的实战记录

    nginx是一个被广泛使用的集群架构组件,我们有必要对它有足够的了解,下面这篇文章主要给大家介绍了一次nginx崩溃事件的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • 详解Nginx服务器中配置超时时间的方法

    详解Nginx服务器中配置超时时间的方法

    这篇文章主要介绍了Nginx服务器中配置超时时间的方法,同时也对Nginx中的时间管理机制作了详细的介绍,需要的朋友可以参考下
    2015-12-12
  • 详解NGINX如何统计网站的PV、UV、独立IP

    详解NGINX如何统计网站的PV、UV、独立IP

    做网站的都知道,平常经常要查询下网站PV、UV等网站的访问数据,这篇文章主要介绍了详解NGINX如何统计网站的PV、UV、独立IP ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 解读nginx反向代理location和proxy_pass的映射关系

    解读nginx反向代理location和proxy_pass的映射关系

    这篇文章主要介绍了解读nginx反向代理location和proxy_pass的映射关系,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Nginx实现404页面的几种方法(三种)

    Nginx实现404页面的几种方法(三种)

    一个网站项目,肯定是避免不了404页面的,通常使用Nginx作为Web服务器时,有些相关配置方法,下面小编给大家带来了Nginx实现404页面的几种方法,感兴趣的朋友一起看看吧
    2018-08-08

最新评论