我的Web应用程序是Django,Web服务器使用Nginx,使用Docker镜像和Elastic Beanstalk进行部署。
通常没有问题,但随着负载均衡器扩展EC2,我的Web服务器变为502 Bad Gateway。
我检查了Elastic Beanstalk应用程序日志,大约16%的请求返回了5xx错误,此时负载均衡器扩展了EC2,导致Web服务器转换到502 Bad Gateway状态,Elastic Beanstalk应用程序转换为Degraded状态
当负载均衡器执行运行状况检查时,这是一个常见问题吗?如果没有,如何关闭健康检查?
我附上了一张拍摄的图像作为参考。
答案 0 :(得分:2)
据我所知,只有通过手动检查网站上的主要链接以及是否可以通过简单的GET请求访问这些链接,才能缓解502 Bad Gateway错误。
如果是我的网站,我的登录页面和“关于”页面存在一些问题(可悲的是,这大约是我网站的33%),这就是为什么在上传到EC2之后,我在运行状况检查时出现了5xx错误。我通过简单地使链接在服务器上工作来解决了这个问题(有些功能仅在本地主机上运行,而不在AWS上运行,所以我将其修复并在运行状况检查中得到了确定的状态)
我认为删除健康检查没有意义,因为它可以提供有关您网站的重要信息,并且您可能不希望您的网站具有无法访问的页面。
保留日志记录以缩小问题范围。
希望您能找到解决方法。
答案 1 :(得分:1)
在部署代码时,您将得到502,因为EC2实例未通过运行状况检查调用。您需要调整负载平衡运行状况检查默认设置,以留出足够的时间来完成部署。如果您还要在每次部署后重新启动服务器,则需要更多时间进行部署。
AWS负载平衡器使用您指定的路径每N秒向每个注册的实例发送运行状况检查请求。默认的间隔秒数是30秒。如果您正在运行的任何实例的运行状况检查均失败N次(默认值为2),则运行状况将更改为“已降级”或“严重”,具体取决于未响应的实例的百分比。
使用默认设置,如果任何Web服务器实例停机超过一分钟(每次尝试两次,每次30秒),则将其视为中断。恢复状态为“ OK”需要5分钟(每30秒尝试10次)。
有关详细说明和配置选项,请查看AWS文档:Configure Health Checks for Elastic Load Balancing