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配置多个站点共用80端口的解决方法

    nginx配置多个站点共用80端口的解决方法

    这篇文章主要介绍了nginx配置多个站点共用80端口的解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • 云服务器使用宝塔搭建Python环境,运行django程序

    云服务器使用宝塔搭建Python环境,运行django程序

    本文详细讲解了在云服务器使用宝塔搭建Python环境,运行django程序的方法。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • Nginx服务器中配置404错误页面时一些值得注意的地方

    Nginx服务器中配置404错误页面时一些值得注意的地方

    这篇文章主要介绍了Nginx服务器中配置404错误页面时一些值得注意的地方,包括隐藏Nginx出错页面及Header上的版本号的安全方法,需要的朋友可以参考下
    2016-01-01
  • Nginx生产环境平滑升级的实现

    Nginx生产环境平滑升级的实现

    本文主要介绍了Nginx生产环境平滑升级的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • centos服务器中配置nginx的方法示例

    centos服务器中配置nginx的方法示例

    这篇文章主要介绍了centos服务器中配置nginx的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • nginx之queue的具体使用

    nginx之queue的具体使用

    本文主要介绍了nginx之queue的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Mac M1 Nginx 配置多站点的实现

    Mac M1 Nginx 配置多站点的实现

    这篇文章主要介绍了Mac M1 Nginx 配置多站点的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Mac上搭建nginx+rtmp直播服务器的步骤详解

    Mac上搭建nginx+rtmp直播服务器的步骤详解

    最近的直播很火,所以这篇文章跟大家分享了在Mac上搭建nginx+rtmp直播服务器的步骤,文章通过一步步图文介绍的很详细,有需要的朋友们可以参考借鉴。
    2016-09-09
  • nginx加php-fpm出现502 bad gateway错误的5种解决方法

    nginx加php-fpm出现502 bad gateway错误的5种解决方法

    这篇文章主要介绍了nginx加php-fpm环境中出现502 bad gateway错误的5种解决方法,总结归纳服务器出现502错误的原因多数为连接过多和脚本超时,本文总结了5种解决方法,需要的朋友可以参考下
    2014-05-05
  • nginx部署vue项目,给访问路径加前缀的实现

    nginx部署vue项目,给访问路径加前缀的实现

    这篇文章主要介绍了nginx部署vue项目,给访问路径加前缀的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论