问题
我有一个运行在带有nginx的6个EC2实例上的Node.js应用程序,所有这些都在ELB后面。我在EC2实例上从nginx增加了504 Gateway Time-out
个错误,这导致不正常的主机从ELB中退出服务,最终导致ELB返回503 Service Unavailable: Back-end server is at capacity
。 / p>
问题
EC2实例中来自nginx的504s增加可能是由于查询速度慢或吞吐量增加,这显然是这里要解决的优先事项,但我在这里提出的主要问题是:
nginx,ELB等的最佳超时配置是什么让它们能够很好地协同工作并防止这些多米诺效应降低ELB?
我遇到的大部分解决方案都涉及Apache或PHP设置,或者我不确定我发现的nginx设置是否真的适用于我当前的设置(我应该关心fastcgi还是代理设置?)
当前配置
以下是我当前配置的细分,非常感谢任何其他指导。
在nginx.conf
中,我有这个:
http {
...
keepalive_timeout 95;
...
}
Amazon says“确保为保持活动时间设置的值大于负载均衡器上的空闲超时设置”,所以我在这里介绍,因为设置了ELB空闲超时到90秒。不确定我是否应该在nginx.conf
中使用更多设置来不依赖于默认设置,或者在其他地方寻找其他非默认设置。
我也在Node.js中使用默认值,我相信它有120000毫秒的请求超时。
ELB有以下Connection Settings
:
Idle Timeout: 90 seconds
ELB具有以下健康检查设置:
Ping Protocol: HTTP
Timeout: 59 seconds
Interval: 60 seconds
Unhealthy Threshold: 3
Healthy Threshold: 2
再次,非常感谢此处的任何指导。
答案 0 :(得分:1)
这个问题可能与ELB和Nginx关系不大,而且与你的Node.js应用程序有关。
如果应用程序阻止了事件循环,Nginx将检测到Node.js应用程序为关闭,然后ELB将认为主机已关闭。
您可以采取一些措施来提供帮助:
cluster
模块,或运行多个节点进程,并使用Nginx upstream
模块在它们之间实现Nginx负载平衡。 如果你仍然觉得Nginx配置存在问题,那么发布的一个有趣部分就是用于将流量从Nginx转发到Node.js的配置。
您也没有指定您为6个EC2实例使用的实例类型。不同类型具有不同级别的CPU和网络吞吐量。根据您的情况,您可能会选择更少更强大的盒子,每盒更多核心。