AWS:Target.FailedHealthChecks - 站点始终处于“严重”状态

AWS:Target.FailedHealthChecks - 站点始终处于“严重”状态

我的 Elastic Beanstalk 应用程序处于恒定severe状态...即使它运行良好。

查看“健康”屏幕,它显示 100% 的请求都是3xx,并且查看日志,这显然得到了证实:

[29/Nov/2017:10:07:46 +0000] "GET / HTTP/1.1" 302 356 "-" "ELB-HealthChecker/2.0"

这非常有意义,因为/302 会将您重定向到“登录”页面。

问题是,我已经告诉 AWS/在检查运行状况时不要使用,而是使用/news应该始终返回的200,无论您是否登录:

在此处输入图片描述

我尝试将健康检查 URL 更改为其他合适的端点,并重新启动 EC2 实例,但它总是返回检查/(根据日志)。我给了它 12 个小时,看看它是否也会及时改变。

那么为什么它会不断检查/并返回severe状态?我该怎么做才能解决这个问题?这可能是安全组问题吗(即使该网站向公众开放)?

答案1

错误似乎是由健康检查引起的应用程序负载均衡器不是 Elastic Beanstalk 应用程序。ALB 需要将其目标改变在不同的地方(查看文档)。

一旦我知道了这一点,这个问题就很容易解决了:

使用控制台修改目标组的运行状况检查设置

  1. 打开 Amazon EC2 控制台https://console.aws.amazon.com/ec2/
  2. 在导航窗格上的“负载平衡”下,选择“目标组”。
  3. 选择目标群组。
  4. 在“运行状况检查”选项卡上,选择“编辑”。
  5. 在编辑目标组页面上,根据需要修改设置,然后选择保存。

答案2

我在 Amazon Linux 2 上的 Elastic Beanstalk 的多容器 Docker 环境中运行 Django 服务器,这个问题让我非常头疼。我以为是 Nginx 的问题,但即使运行着 Nginx 容器,问题仍然没有解决!所以我的应用程序可以访问并运行,但状态很严重,它只在 EB 健康仪表板上显示目标不匹配错误……但没有代码!使用 Django Reinhardt 的答案,我发现错误代码显示在负载均衡器设置的目标组部分!果然,我400在健康检查中遇到了错误。

使用这个帖子,我了解到健康检查发生在私有 AWS IP 上!如果此 IP 不在您的范围内ALLOWED_HOSTS,则会出现 400 错误!使用 进行测试后ALLOWED_HOSTS = ['*'](不要在生产中这样做!),问题消失了!

不确定是否仍需要 Nginx 容器。下一步是动态添加相关的 AWS IP ALLOWED HOSTS(例如这里

答案3

我创建了一个带有“经典”负载均衡器的新环境,并从现有环境中复制了所有设置,然后就解决了这个问题。我的“应用程序”负载均衡器配置错误,我没费心去弄清楚问题出在哪里。

相关内容