Nginx代理缓冲-更改缓冲区';s号和尺寸?

Nginx代理缓冲-更改缓冲区';s号和尺寸?,nginx,proxy,load-balancing,Nginx,Proxy,Load Balancing,我想知道并试图弄清楚这两种设置: proxy_buffers [number] [size]; 可能会影响(提高/降低)代理服务器性能,以及是否更改缓冲区的大小或数量,或两者都更改 在我的特定案例中,我们讨论的是一个为动态生成的二进制文件提供服务的系统,这些文件的大小可能不同(~60-200kB)。Nginx在作为生成器的2个tomcat前面充当负载平衡器。我在Nginx的error.log中看到,使用默认缓冲区的大小设置,所有代理响应都被缓存到一个文件中,因此我发现合乎逻辑的是将设置更改为如

我想知道并试图弄清楚这两种设置:

proxy_buffers [number] [size];
可能会影响(提高/降低)代理服务器性能,以及是否更改缓冲区的大小或数量,或两者都更改

在我的特定案例中,我们讨论的是一个为动态生成的二进制文件提供服务的系统,这些文件的大小可能不同(~60-200kB)。Nginx在作为生成器的2个tomcat前面充当负载平衡器。我在Nginx的error.log中看到,使用默认缓冲区的大小设置,所有代理响应都被缓存到一个文件中,因此我发现合乎逻辑的是将设置更改为如下所示:

proxy_buffers 4 32k;
警告信息消失了

我不清楚的是,我是否应该设置一个较大的缓冲区,或者设置几个较小的缓冲区。。。例如:

proxy_缓冲区1128kvs<代码>代理缓存4 32kvs<代码>代理缓存8 16k,等等


有什么区别,以及它可能如何影响性能(如果有)?

首先,最好看看文档中关于指令的说明:

语法:代理缓冲区数字大小
默认值:代理缓冲区8 4k | 8k
上下文:http、服务器、位置

为单个连接设置用于从代理服务器读取响应的缓冲区的数量和大小。默认情况下,缓冲区大小等于一个内存页。这是4K或8K,取决于平台

将级别跳到提供了更多的解释:

启用缓冲后,nginx会尽快从代理服务器接收响应,并将其保存到proxy\u buffer\u size和proxy\u buffers指令设置的缓冲区中。如果整个响应无法放入内存,则可以将部分响应保存到磁盘上的临时文件中

当缓冲被禁用时,响应会在收到时立即同步传递给客户机


那么,这一切意味着什么

  • 首先,Nginx经过高度优化,在资源方面效率最高。众所周知,它使用最少的资源为每个连接提供服务。每个连接额外增加4KB将是相当大的增加-这就是它的效率

  • 您可能会注意到,缓冲区的大小被选择为与相关平台的页面大小相等。基本上,长话短说,绝对最佳数可能超出了StackOverflow问题的范围,也可能高度依赖于操作系统和CPU体系结构

  • 实际上,较大数量的较小缓冲区与较小数量的较大缓冲区之间的区别可能取决于操作系统提供的内存分配器,以及您拥有的内存量,以及您希望在分配内存时浪费多少内存,而不是将其用于良好用途

    例如,我不会将其设置为
    代理缓冲区1 1024k
    ,因为这样您将为每个缓冲连接分配1MB缓冲区,即使内容仍然可以轻松放入4KB的连接中,这可能会浪费额外的内存()。缓冲区的默认数量也被选择为
    8
    ,这可能是一个很好的理由

  • 如果您实际使用缓存这些二进制文件的响应,那么增加缓冲区实际上可能有点毫无意义,因为nginx仍然会将其写入光盘以进行缓存,您也不必浪费额外的内存来缓存这些响应

    一个好的操作系统应该已经能够通过文件系统缓冲区缓存功能对写入磁盘的内容进行适当的缓存-请参阅(可能还有一篇有点奇怪的文章,因为HDD硬件文章已经使用了“磁盘缓冲区”的名称)-因此,可能不需要在nginx中直接复制缓冲。您还可以看看关于多级缓存主题的其他想法和灵感,以及好的操作系统应该已经能够很好地处理许多事情的事实,尽管如此,一些人仍然试图通过特定于应用程序的功能错误地优化这些事情

  • 同样,如果您实际上没有对响应进行缓存,那么您最好首先问问自己缓冲是否合适

    实际上,缓冲可能会更好地保护你的上游流免受SLULLULIS攻击向量的影响。但是,如果你让你的NGIX拥有兆字节大小的缓冲区,那么,本质上,你就开始暴露NGIX本身,因为它消耗了不合理的资源量来为恶意的客户端服务。
  • 如果响应太大,您可能希望在响应级别对其进行优化。将某些内容拆分为单个文件;在文件级进行压缩;在HTTP
    Content Encoding
    level等上使用
    gzip
    进行压缩



  • TL;DR:这真的是一个相当广泛的问题,有太多的变量需要非琐碎的调查,才能为任何给定的情况找到绝对最佳的答案。

    @aland顺便说一句,我忘了提到另一件事-如果你只是为了授权目的而使用上游,并且文件已经在光盘上生成和/或可用,那么您可能还希望按照使用
    X-Accel-Redirect
    功能,这非常有用。还得到了以下帮助:有多少nginx缓冲区太多?”“TL;DR-增加数字,保持大小。不要介意静态文件,因为它们无论如何都会缓存在磁盘中。