2010-07-13 69 views
6

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

我很无知,为什么会发生这种情况。有没有人遇到类似的504超时?是否有一些中间代理服务器不在我的控制范围之内?

+0

你能解决这个问题? – Tony 2013-05-17 14:43:35

回答

0

在脚本执行过程中浏览器超时是可能的。

1

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

也许最好的解决办法是重新手艺服务器应用程序,以便将其与“303查看其它”状态码响应;那么您的客户端可以在稍后的数据点检索数据,一旦服务器完成处理并创建最终结果。

编辑:另一个想法是重新工艺的服务器应用程序,以便将其与“413请求实体过大”状态码返回时,请求实体太大。这将摆脱错误的,虽然它可能让你的应用程序,如果它只能处理“小”文件不太有用“

其他可能的解决方案:代理的

  • 增加超时值(如果它你的控制之下)
  • 提出请求到不同的服务器(如果有另一个具有相同的应用程序更快的服务器)
  • 不同让你的要求(如果可能的话),这样你一次发送更少的数据
+0

任何想法来解决这个问题?我的服务器在30秒后超时。同样的情况,在亚马逊EC2上传大文件 – Tony 2013-05-17 14:44:13

+0

除了那些列出的?抱歉,没有。 – 2013-05-17 19:59:52

5

我有一个类似的问题,在我的情况下,我相信这是由于Elastic Load Balancer(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

看起来您现在可以现在自行配置超时:http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/config-idle-timeout.html – 2015-06-17 01:47:52