如何修复弹性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上的spring boot应用程序-健康检查失败