如果在规定的时间内没有从上游收到HTTP响应,有人知道让亚马逊的弹性负载均衡器超时的方法吗?
偶尔,亚马逊的Elastic Beanstalk会在更新失败,对指定资源的任何请求(如果有任何用途,则运行Nginx+Node)都会在资源尝试加载时挂起任何请求页面。
我希望将请求超时时间保持在2s以下,如果上游服务器到那时没有响应,则自动故障切换到默认的503响应。
ELB有可能做到这一点吗?
干杯
您可以为弹性负载平衡配置健康检查设置来实现这一点:
弹性负载平衡会根据您指定的配置定期检查每个注册的Amazon EC2实例的运行状况。如果弹性负载平衡发现一个不正常的实例,它会停止向该实例发送流量,并将流量重新路由到正常的实例。有关配置运行状况检查的更多信息,请参阅运行状况检查。
例如,您只需要为HTTP运行状况检查指定一个适当的Ping路径,2秒的响应超时和1的1不正常阈值来近似您的规范。
- 看看我对亚马逊ELB自动健康检查的回答,它能做什么?有关ELB健康检查系统如何工作的更多详细信息
TLDR-在Nginx中设置超时。
让我们看看我们是否能解决这些问题。
问题:应该迅速向客户介绍一些东西。如果是500页也没关系。然而,ELB目前等待60秒,直到放弃(https://forums.aws.amazon.com/thread.jspa?messageID=382182)这意味着在向用户显示任何内容之前需要一分钟的时间。
解决方案:
-
更改ELB的超时看来AWS支持将有助于增加超时(https://forums.aws.amazon.com/thread.jspa?messageID=382182)所以我想你可以要求相反的结果。因此,我们可以看到,它不是用户/api可调的,需要您与支持交互。这需要一些准备时间,更重要的是,当未来从事该项目的开发人员会对如此短的超时时间感到惊讶时,这似乎是一个奇怪的调整。
-
更改nginx服务器的超时这似乎是正确的变革水平。您可以使用
proxy_read_timeout
(http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_read_timeout)去做你想做的事。将其调到较小的位置(特别是,如果你愿意,你可以将其设置为特定的位置)。 -
更改请求发生的方式。更改客户端代码的工作方式可能是有益的。你可以想象一个非常简单的html/js页面。ping以查看作业是否完成,以及2。让用户了解最新进展。这比仅仅抛出500页需要更多的工作。
最近,AWS添加了一种为ELB配置超时的方法。查看此博客文章:
http://aws.amazon.com/blogs/aws/elb-idle-timeout-control/