如何在浏览器中忽略来自AWS ELB的空闲超时

时间:2018-07-16 13:42:36

标签: angularjs amazon-web-services file-upload amazon-elb

我有一个应用程序,用户可以使用angular-file-upload.js上传PDF

此库不支持文件分块:https://github.com/nervgh/angular-file-upload/issues/41

我的弹性负载均衡器配置为具有10秒的空闲超时,并且应用程序的其他部分取决于保留此参数。

问题是,如果文件上传花费的时间超过10秒,则用户在浏览器中收到“ 504网关超时”和错误消息。但是,文件仍会在一段时间后到达服务器。

如何忽略或不向用户显示来自ELB的504网关超时?有没有其他方法可以解决这个问题?

1 个答案:

答案 0 :(得分:5)

您遇到的问题是,除非ELB从服务器返回一些流量,否则它总是会关闭连接。请参阅以下AWS docs。对于ALB或经典负载均衡器,行为相同。

  

默认情况下,Elastic Load Balancing将空闲超时设置为60秒   对于两个连接。因此,如果实例不发送一些   在请求进行过程中,至少每60秒发送一次数据,   负载均衡器可以关闭连接。确保冗长   文件上传等操作有时间完成,至少发送1次   每个空闲超时时间结束之前的数据字节,并增加   所需的空闲超时时间长度。

要解决此问题,您有两种选择:

  1. 更改服务器处理,以在建立连接后立即以不到10秒的间隔开始发送一些数据。
  2. 使用其他库进行上传,或使用原始javascript。有很多例子,例如this one

修改:第三种选择 感谢@colde提出了有效的论点,您可以简单地完全解决负载平衡器问题。这样做还有一个好处,就是可以释放服务器资源,而服务器资源却与冗长的上传时间捆绑在一起。在执行此操作时,我们使用pre-signed urls安全地实现了这一目标。