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

Wil*_*oss 5 file-upload amazon-web-services amazon-elb angularjs

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

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

我的弹性负载平衡器配置为具有10秒的空闲超时,应用程序的其他部分依赖于保留此参数.

问题是如果文件上载时间超过10秒,则用户在浏览器中收到504网关超时并显示错误消息.但是,文件仍会在一段时间后到达服务器.

如何忽略或不向用户显示来自ELB的此504网关超时?还有另一种解决这个问题的方法吗?

Avn*_*ner 5

您遇到的问题是ELB总是要关闭连接,除非它从您的服务器获得一些流量.请参阅以下AWS 文档.对于ALB或Classic负载均衡器,它的行为相同.

默认情况下,Elastic Load Balancing将两个连接的空闲超时设置为60秒.因此,如果实例在请求处于运行状态时至少每60秒发送一些数据,则负载均衡器可以关闭连接.要确保文件上载等冗长的操作有时间完成,请在每个空闲超时周期结束前发送至少1个字节的数据,并根据需要增加空闲超时时间的长度.

因此,为了解决这个问题,您有两种选择:

  1. 更改服务器处理,以便在建立连接后立即开始发送一些数据,间隔小于10秒.
  2. 使用其他库进行上传,或使用vanilla javascript.有很多例子,例如这个.

编辑:第三个选项感谢@colde提出有效点,您可以完全解决负载均衡器问题.这样做的另一个好处是可以释放您的服务器资源,这些资源会被冗长的上传所困扰.在我们的实现中,我们使用预先签名的URL来安全地实现此目的.

  • 如果文件将被放置在S3上,使用https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html之类的东西也可能是一个解决方案.这完全绕过了负载均衡器. (3认同)