我有一个应用程序,用户可以使用angular-file-upload.js上传PDF
此库不支持文件分块:https://github.com/nervgh/angular-file-upload/issues/41
我的弹性负载均衡器配置为具有10秒的空闲超时,并且应用程序的其他部分取决于保留此参数。
问题是,如果文件上传花费的时间超过10秒,则用户在浏览器中收到“ 504网关超时”和错误消息。但是,文件仍会在一段时间后到达服务器。
如何忽略或不向用户显示来自ELB的504网关超时?有没有其他方法可以解决这个问题?
答案 0 :(得分:5)
您遇到的问题是,除非ELB从服务器返回一些流量,否则它总是会关闭连接。请参阅以下AWS docs。对于ALB或经典负载均衡器,行为相同。
默认情况下,Elastic Load Balancing将空闲超时设置为60秒 对于两个连接。因此,如果实例不发送一些 在请求进行过程中,至少每60秒发送一次数据, 负载均衡器可以关闭连接。确保冗长 文件上传等操作有时间完成,至少发送1次 每个空闲超时时间结束之前的数据字节,并增加 所需的空闲超时时间长度。
要解决此问题,您有两种选择:
修改:第三种选择 感谢@colde提出了有效的论点,您可以简单地完全解决负载平衡器问题。这样做还有一个好处,就是可以释放服务器资源,而服务器资源却与冗长的上传时间捆绑在一起。在执行此操作时,我们使用pre-signed urls安全地实现了这一目标。