AWS-elb 运行状况检查失败,代码为 302

问题描述 投票:0回答:7

您好,我在 7070 端口(非 ssl)上创建了 ALB 侦听器 443 和目标组实例

我可以毫无问题地访问instanceip:7070,但是使用https://elb-dns-name无法访问..实例运行状况检查也失败,并显示302代码

ALB 监听端口 https 且实例为 http 协议,

当我使用 https://dns-name 浏览时,它重定向到 http://elb-dns-name

amazon-web-services aws-elb
7个回答
53
投票

执行 URL 重定向时收到 302,任何 ELB 健康检查都会查找成功代码 200 以使健康检查通过。在 ALB 中,可以在 ELB 控制台的运行状况检查下进行配置。

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

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

enter image description here


9
投票

我在 AWS ALB 中遇到了同样的问题(运行状况检查失败,代码如下:[302]) 配置:

  • 仅侦听端口 80 的 Tomcat 9 服务器
  • ALB 运行状况检查路径设置为“/my_app_name”,期望从应用程序的根索引页面提供运行状况检查。

我配置的运行状况页面预计不会执行任何重定向,但如果服务器运行状况良好,则返回 HTTP/200,如果服务器运行状况不佳,则返回 HTTP/500。

所提出的仅添加 HTTP/302 作为成功代码的解决方案绝对是错误且具有误导性的。 这意味着页面的内部健康检查逻辑未运行,因为 HTTP/302 重定向代码仅显示服务器响应的常见能力。

问题出在 Tomcat 服务器本身,在请求“/my_app_name”时,会使用 HTTP/302 重定向到“/my_app_name/”(注意末尾的斜杠)。

因此将健康检查路径设置为“/my_app_name/”解决了问题,健康检查逻辑运行良好并返回HTTP/200。


3
投票

就我而言,我有一个域名

www.domain.com

但默认情况下,当您访问域且未登录时,您会立即重定向到

www.domain.com/login

...这就是导致问题的原因

所以你有2个选择:

  1. 转到您的 aws 目标组 -> 运行状况检查并将默认路径

    /
    更改为新路径,在我的情况下为
    /login
    。我真的确定登录端点是否有效 - 网站也有效。

  2. 转到您的 aws 目标组 -> 运行状况检查并将默认状态代码从

    200
    更改为
    200,301,302
    (添加了两个重定向状态代码)。这绝对是不太合适的方式,但仍然可以接受,取决于具体情况


2
投票

在入口控制器中添加此注释,它将修改成功代码,并且节点将处于健康状态。

alb.ingress.kubernetes.io/success-codes: 200,404,301,302

2
投票

我最近遇到了同样的问题,根据@SudharsanSivasankaran的建议,我们已经编辑了目标级别的健康检查设置。

但是我们保留了仅 200 的状态代码,而是更新了路径以直接访问重定向到的页面。

例如,如果实例:80下托管的网站需要用户登录并将其重定向到 /login 页面,我们需要做的就是在健康检查中添加 /login 路径。


0
投票

我遇到过类似的情况,我在 ELB 上卸载 TLS,然后使用纯 HTTP 将流量发送到端口 80。我总是从 ELB 获取 302 代码。

您可以更改目标组的状态代码并将成功代码指定为 302,但我认为这不是一个好主意。因为如果您更改了 Apache 或 htaccess 文件中的某些配置,您可能会遇到不同的状态代码,这可能会导致您的实例停止服务。健康检查的目标是识别有故障的服务器并将其从生产环境中删除。

这个解决方案对我来说非常有用:https://stackoverflow.com/a/48140513/14033386

下面引用更多解释:

启用mod_rewrite模块。在大多数 Linux 发行版中,当您安装 Apache 时,它会默认启用。但无论如何都要检查一下。检查这个:https://stackoverflow.com/a/5758551/14033386

LoadModule rewrite_module modules/mod_rewrite.so

然后将以下内容添加到您的虚拟主机。

ErrorDocument 200 "ok"
RewriteEngine On
RewriteRule "/AWS-HEALTH-CHECK-URL" - [R=200]

AWS-HEALTH-CHECK-URL 是您在运行状况检查设置中指定的 URL。

AWS EC2 - Target Groups - YOUR_GROUP - Health Checks

只要您的服务器处于活动状态并正在处理请求,此解决方案将始终返回特定 URL 的 200 个代码。


0
投票

在我们的设置中,我们有一个网络负载均衡器 (NLB),它将流量转发到应用程序负载均衡器 (ALB)。为了让 ECS 服务(包含 NAT 网关的入站规则的私有子网)执行运行状况检查,它需要调用外部端点(出),然后获取响应(入)。

解决方案是向 NAT 网关 IP 上的 HTTPS 端口的 NLB > 安全组添加入站条目。

© www.soinside.com 2019 - 2024. All rights reserved.