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

What happens when nginx proxy_buffer_size is exceeded?

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

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

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

  1. 将请求模块的超时时间增加到2000
  2. 将容器 uv_threadpool_size 环境变量设置为最大 128

虽然 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. nginx proxy_buffer_size 是否会导致错误 a) 在操作大图像的情况下超出大小或 b) 请求量超出缓冲区大小?
  2. 更新大小的成本影响是什么(如果有)。 AWS 内存、实例大小等?

我看到了 this 有用的文章,但想了解更多关于这是否对我的情况有帮助的意见。

当超过 proxy_buffer_size 时,它会创建一个临时文件用作一种 "swap",它会占用您的存储空间,如果收费,您的成本将会增加。当您增加 proxy_buffer_size 值时,您将使用更多 RAM,这意味着您将不得不支付更大的费用,或者使用当前的试试运气。

有两件事永远不应该让用户等待处理:e-mails 和图像。它可能导致超时甚至整个应用程序不可用。您始终可以为这些端点使用更大的超时,或者甚至更强大的实例,但是当它扩展时,您将遇到问题。

我建议您采用不同的方法:制作图像占位符响应并异步处理这些图像。当它们作为版本调整大小的图像可用时,您可以正常提供它们。有一个 AWS article 关于使用 lambda 的类似东西。