如何修复弹性beantalk实例上的“使用这些代码失败的健康检查:”?

Posted

技术标签:

【中文标题】如何修复弹性beantalk实例上的“使用这些代码失败的健康检查:”?【英文标题】:How to fix 'Health checks failed with these codes: ' on elasticbeanstalk instace? 【发布时间】:2019-08-14 15:48:39 【问题描述】:

由于 Target.ResponseCodeMismatch 错误,我的应用程序的健康状态为严重。

我已尝试在此 aws instruction 中遵循 未在后端配置重定向。我已经在 eb config 上将我的 port 更改为 '443' 并将我的 protocol 更改为 'HTTPS' 并重新部署。它将健康状态更改为正常,但是当我访问我的网址时,我只得到页面“索引”

这是eb status --verbose 返回的内容:

Description: Health checks failed with these codes: [301]
Reason: Target.ResponseCodeMismatch

这是来自eb config

AWSEBV2LoadBalancerListener.aws:elbv2:listener:default:
  DefaultProcess: default
  ListenerEnabled: 'true'
  Protocol: HTTP
  Rules: null
  SSLCertificateArns: null
  SSLPolicy: null
AWSEBV2LoadBalancerListener443.aws:elbv2:listener:443:
  DefaultProcess: default
  ListenerEnabled: 'true'
  Protocol: HTTPS
  Rules: null
  SSLCertificateArns: arn:aws:acm:us-east-2:XXXX:certificate/XXXXXX
  SSLPolicy: ELBSecurityPolicy-XX-XX-XXXX  
aws:elasticbeanstalk:environment:process:default:
  DeregistrationDelay: '20'
  HealthCheckInterval: '15'
  HealthCheckPath: /      
  HealthCheckTimeout: '5'
  HealthyThresholdCount: '3'
  MatcherHTTPCode: null
  Port: '443'
  Protocol: HTTPS

【问题讨论】:

【参考方案1】:

对于可能像我一样遇到此问题的人,我发现解决方案是将 ELB 目标组的运行状况检查端点设置为我网站上返回 HTTP 200 代码的实际 URL.

在 EC2 仪表板上,在负载平衡 -> 目标组下,转到选项卡运行状况检查并编辑指向您站点中返回 200 代码的路径的路径。

View image - EC2 -> Load Balancing -> Target Groups

【讨论】:

【参考方案2】:

我遇到了类似的问题。在我的情况下,解决方法是将运行状况检查的“成功代码”设置从 200 更改为 200,301

【讨论】:

感谢@jason 的宝贵意见。你的评论救了我。 :-)【参考方案3】:

通常情况下,您的应用会在部署时公开其本机端口。在 java 的情况下,这通常是 8080,节点是 3000。然后,作为 EB 的一部分,AWS 将仍然是 apache 或 nginx 的代理,在您的应用程序前面公开端口 80。ELB 将端口 443 公开给外部。

所以你可能想将端口和协议更改为 80 / HTTP

【讨论】:

【参考方案4】:

这似乎对我有所帮助,在

“健康检查设置”>“高级健康检查设置”

在:“端口”从“交通端口”到“覆盖”并使用“80”

在:“成功代码”下

EB 的一个实例 从“200”到“200,300,301,302,303,304,305,306,307,308”(在 Elastic Beanstalk 中,健康因“3xx 响应”而下降)

EB 的第二个实例 从“200”到“200,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,422,425,426,428,429,431,451”(在 Elastic Beanstalk 中)健康度下降>

【讨论】:

【参考方案5】:

我遇到了以下问题:

Description: Health checks failed with these codes: [400]
Reason: Target.ResponseCodeMismatch

为我解决的问题是将 Success codes 值输入到 400。 EC2(服务)>负载平衡(从左侧菜单)>目标组(单击名称)>运行状况检查(单击选项卡)>编辑>高级运行状况检查设置>成功代码= 400

【讨论】:

是的,这可以解决问题,但是由于 HTTP 400 错误代码表示客户端失败,我认为您不希望在成功代码列表中使用此代码。 @stijndepestel 问题是我的 AWS 环境运行状况正在从正常过渡到严重,而没有添加此成功代码,我找不到其他选择。 您是否在 API 中实现并配置了 beanstalk 服务可以使用的健康检查端点?问题是,它还使用此信息自动从故障中恢复,例如,如果您将 400 HTTP 错误代码添加到成功代码列表中,则可靠性会大大降低。 @stijndepestel 是的,我尝试将Path 配置为模板和根目录中存在的 /index.html 以及 /multiple 这是 myenv.region.elasticbeanstalk.com/multiple 中的有效 url,同时保持成功代码为 200 @stijndepestel 我的应用程序使用客户端测试,因此如here 中所述,经常出现 400 错误。因此,如我的Description 中所述,将Success codes 设置为400 或忽略HTTP 4xx (https://***.com/a/51556599/14408583) 可以工作!!

以上是关于如何修复弹性beantalk实例上的“使用这些代码失败的健康检查:”?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用弹性 beantalk 和 aws 修复 Flask 应用程序中的内部服务器错误

如何在自动缩放的弹性 beantalk 实例中更新文件

如何更改附加到弹性 beantalk 的负载均衡器

弹性beantalk上的spring boot应用程序-健康检查失败

如何将自签名证书分配给 AWS 弹性 beantalk 应用程序

如何在同一个弹性beantalk实例上运行socket.io和表达?