当超过nginx proxy_buffer_size时会发生什么?

时间:2018-03-27 20:31:46

标签: nginx buffer

我正在使用Docker在AWS Elastic Beanstalk中运行节点服务器,它也使用nginx。我的一个端点负责图像处理,如调整大小等。 我的日志显示了很多ESOCKETTIMEDOUT错误,表明它可能是由无效的网址引起的。

情况并非如此,因为它处理这种情况是相当基本的,当我打开明显无效的网址时,它会很好地加载图像。

到目前为止,我的研究使我做出了以下改变:

  1. 将请求模块的超时时间增加到2000
  2. 将容器uv_threadpool_size env变量设置为max 128
  3. 虽然1有助于改善响应时间,但我没有看到任何改进2.我现在在服务器日志中遇到以下警告:

    an upstream response is buffered to a temporary file /var/cache/nginx/proxy_temp/0/12/1234567890 while reading upstream,

    这让我觉得ESOCKETTIMEDOUT错误可能是由于超出了proxy_buffer_size。但是,我不确定,在我继续根据预感做出改变之前,我想对此有一些看法。

    所以我有两个问题:

    1. 如果a)在操作大图像时超出大小或b)请求量超出缓冲区大小,nginx proxy_buffer_size会导致错误吗?
    2. 更新尺寸会产生哪些成本影响(如果有)。 AWS内存,实例大小等?
    3. 我遇到了this有用的文章,但想要更多的意见,如果这对我的情况有帮助的话。

1 个答案:

答案 0 :(得分:0)

当超出proxy_buffer_size时,它会创建一个临时文件,用作" swap",它会使用您的存储空间,如果是可计费的,您的费用会增加。当您增加proxy_buffer_size值时,您将使用更多RAM,这意味着您将需要支付更大的RAM,或者尝试使用当前的运气。

有两件事你不应该让用户等待处理:电子邮件和图片。它可能导致超时甚至整个应用程序不可用。您可以随时使用更大的超时时间,甚至是更强大的实例,但是当它扩展时,您将遇到问题。

我建议您采用不同的方法:制作图像占位符响应并异步处理这些图像。当它们作为版本化的已调整大小的图像可用时,您可以正常提供它们。对于使用lambda来说,有AWS article这样的事情。