【问题标题】:Connection closed during file upload - ELB timeout?文件上传期间连接关闭 - ELB 超时?
【发布时间】:2015-12-20 03:12:45
【问题描述】:

我们最近将一个 Nexus 实例移至 AWS,但在关闭大文件上传时遇到了问题。我们怀疑这可能是由于这个 gem 导致的 ELB 超时:

“如果 HTTP 请求未在空闲超时期限内完成,负载均衡器将关闭连接,即使数据仍在传输中。”

来源:http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/config-idle-timeout.html

如果正在传输数据,连接如何空闲?为什么会这样?

有些文件有很多 GB - 上传可能需要几分钟,如果忙的话,假设是 30 分钟。我们应该如何支持这一点,将超时设置为 1800 秒真的是推荐的解决方法吗? (最多 3,600)

谢谢, 乔尔

【问题讨论】:

  • Keep-alive 在服务器和客户端启用,但这仅对顺序请求有效。如果还有其他可能的原因和解决方案,我很高兴听到它! :)
  • 您要上传到 s3 吗?您在下面的评论中提到了这一点。
  • 不,该评论的意思是说我们不允许按照建议使用 S3,原因太复杂,无法深入探讨。

标签: http amazon-web-services file-upload keep-alive amazon-elb


【解决方案1】:

这确实看起来是一个有趣的宝石。解释可能在于底层实现实际上有两个计时器,一个用于客户端,一个用于服务器。我在猜测,但如果不是出于这些方面的考虑,某些拒绝服务攻击可能更容易针对 ELB 及其背后的机器实施。

答案将在 ELB 访问日志中。如果您看到可疑的时间接近 60 秒,则可能是罪魁祸首。

增加计时器可能是一种选择。

不过,通常情况下,Web 应用程序似乎需要在几毫秒内进出、完成、继续下一步。将进程或线程与上传等长时间运行的东西捆绑在一起意味着您可能能够处理成百上千个其他请求,如果不是因为上传的资源占用。将非常大的文件上传到单独的环境或服务(例如 S3,它可以接受 POST 上传,然后在上传完成后将浏览器重定向回您的“成功”页面)可能会更好地处理真正大文件的文件上传) .其他策略可能包括智能客户端逻辑,以分批发送上传,可能是并行发送,能够重新启动/重试以及执行其他聪明的事情,例如进度条。

我在 ${dayjob} 可能有 20-30 个 ELB 部署,但从未出现过这种情况,但是我没有任何系统在面向用户的一侧处理“大”文件。我正在考虑的这些系统的“大”上传可能是 16MB,所以绝对是不同的规模。

【讨论】:

  • 感谢您的回复!然而,今天重复上传大文件的测试显示没有超时,即使故意放慢速度以超过 60 秒。事实上,自周一以来,上传的过程就没有失败过。所以我们不能复制它,我们只能希望它不会回来,但我们没有进一步的解决方案。不幸的是,由于其他原因,该进程无法上传到 S3。
  • 出乎意料,而且很有趣。嗯。
【解决方案2】:

是的,您正在达到 60 秒的 ELB 超时默认值。解决方法是将 ELB 超时增加到足够高的值,这样您的上传不会失败(当前最大值:1 小时)。连接看起来很理想,因为请求未在超时期限内完成。

【讨论】:

  • 我在我的 ec2 上遇到了这个问题,但我没有设置任何负载均衡器......你认为如果我设置一个然后增加限制这可以解决它吗?
猜你喜欢
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2020-02-11
  • 2013-02-25
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多