【问题标题】:HTTP 504 timeout after exactly 120 seconds恰好 120 秒后的 HTTP 504 超时
【发布时间】:2010-07-13 05:56:04
【问题描述】:

我有一个在 Amazon EC2 云中运行的服务器应用程序。从我的客户端(浏览器)发出一个 HTTP 请求,该请求将文件上传到服务器,然后服务器处理该文件。如果有很多处理(大文件 ),服务器总是在 120 秒后超时并出现 504 后端继续错误。虽然我收到此错误,但服务器继续处理请求并完成它(通过检查数据库进行验证),但由于超时,我无法在客户端上看到最终结果。

我不知道为什么会这样。有没有人遇到过类似的 504 超时?是否有一些不受我控制的中间代理服务器正在超时?

【问题讨论】:

  • 你能解决这个问题吗?

标签: http timeout amazon-s3 amazon-ec2


【解决方案1】:

我有一个类似的问题,我认为这是由于弹性负载均衡器 (ELB) 和 EC2 实例之间的连接造成的。

对于长期解决方案,我将采用上述 james.garriss 建议的 303 状态响应 + 后端处理。

对于短期解决方案,亚马逊支持可能会增加 ELB 超时(请参阅他们在 https://forums.aws.amazon.com/thread.jspa?messageID=491594&#491594 中的回复)。 不幸的是,似乎没有任何方法可以通过 API 或控制台自行更改超时。

[更新] AWS 现在允许您通过控制台、CLI 或 .ebextensions 配置更新空闲超时。见http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/config-idle-timeout.html(感谢@Daniel Patz 的更新)

【讨论】:

【解决方案2】:

假设返回了正确的状态码,问题是中间代理超时。 “服务器在充当网关或代理时,没有收到来自 URI 指定的上游服务器的及时响应。” (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.5)这很可能表明源服务器存在某种问题(即,处理您的请求需要很长时间),所以它没有快速响应。

也许最好的解决方案是重新设计您的服务器应用程序,使其以“303 See Other”状态代码响应;然后,一旦服务器完成处理并创建最终结果,您的客户端就可以在稍后的数据点检索数据。

编辑:另一个想法是重新设计您的服务器应用程序,以便在请求实体大小太大时响应“413 Request Entity Too Large”状态代码。这将消除错误,但如果它只能处理“小”文件,它可能会降低您的应用的用处。”

其他可能的解决方案:

  • 增加代理的超时值(如果它在您的控制之下)
  • 向其他服务器发出请求(如果有其他更快的服务器使用相同的应用程序)
  • 以不同的方式提出您的请求(如果可能),以便您一次发送的数据更少

【讨论】:

  • 有什么办法可以解决这个问题吗?我的服务器在 30 秒后超时。同样的场景,在 Amazon EC2 中上传大文件
  • 除了那些列出的?对不起,没有。
【解决方案3】:

脚本执行期间浏览器可能超时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    相关资源
    最近更新 更多