代码之家  ›  专栏  ›  技术社区  ›  William Ross

如何在浏览器中忽略aws elb的空闲超时

  •  5
  • William Ross  · 技术社区  · 6 年前

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

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

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

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

    如何忽略或不向用户显示来自ELB的504网关超时?有别的办法解决这个问题吗?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Avner    6 年前

    你遇到的问题是ELB总是要关闭连接,除非它从你的服务器得到一些流量。见以下AWS docs 是的。对于alb或经典的负载均衡器,这是相同的行为。

    默认情况下,弹性负载平衡将空闲超时设置为60秒 两种连接。因此,如果实例不发送 当请求在飞行中时,数据至少每60秒 负载平衡器可以关闭连接。以确保 文件上传等操作有时间完成,至少发送1个 在每个空闲超时周期过去之前的数据字节,并增加 空闲超时时间的长度(根据需要)。

    因此,要解决这个问题,你有两个选择:

    1. 将服务器处理更改为在建立连接后立即以少于10秒的间隔发送一些数据。
    2. 使用另一个库进行上传,或者使用vanilla javascript。有很多例子,例如。 this one 是的。

    编辑: 第三种选择 感谢@cold提出了一个有效的观点,即您可以完全围绕您的负载平衡器工作。这还有一个额外的好处,就是释放服务器资源,这些资源会被长时间的上传所束缚。在我们实现这一点时,我们使用 pre-signed urls 为了安全地实现这一点。