AWS ALB 运行状况检查 404

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

我的 ALB 目标组中有 2 个目标。但是我的健康检查无法正常工作。两者都显示

"Health checks failed with these codes: [404]"

我的健康检查路径设置是:

/var/www/html/generic/website.com/healthcheck.php

如果我在 ec2 实例上执行

nano /var/www/html/generic/website.com/healthcheck.php
,它会显示这应该是我认为的所有健康检查需求。

<?php
header("Status: 200");
?>

我仔细检查了 AZ 和 ALB 是否与 2 个实例位于同一子网中。 另外,当我检查我的 apache 日志时,我看到的是:

"GET /var/www/html/generic/website.com/healthcheck.php HTTP/1.1" 404 196 "-" "ELB-HealthChecker/2.0"

我做错了什么导致健康检查失败?

amazon-web-services apache amazon-ec2 amazon-elb aws-alb
4个回答
2
投票

似乎您无法使用基于名称的虚拟主机进行运行状况检查。所以在我的虚拟主机文件中我添加了以下代码。它的作用是,如果有人直接访问您的 ip,它会给他们一个 404,但如果他们访问您的 ip/healthcheck,那么它会显示 200,这正是 ALB 所需要的。然后在你的路径中放入/healthcheck。

<VirtualHost *:80>
  ServerName default
  RewriteRule "/healthcheck" - [R=200]
  Redirect 404 /
</VirtualHost>
<VirtualHost _default_:80>
  RewriteRule "/healthcheck" - [R=200]
  Redirect 404 /
</VirtualHost>

1
投票

ALB 健康检查将通过 Web 界面访问您的 healthcheck.php,并且不知道文件存在于文件系统上的位置。该值需要是主机名后的 URI 路径。

将运行状况检查配置为

/var/www/html/generic/website.com/healthcheck.php
相当于告诉 AWS 检查
http://website.com//var/www/html/generic/website.com/healthcheck.php
,这可能不是您的本意。

假设您要检查的实际路径更像是

http://website.com/healthcheck.php
,请将您的健康检查路径更新为
/healthcheck.php
,这应该对您有用。


0
投票

因为您在 nginx 中有多个命名主机。您可以尝试在

/
上设置运行状况检查,并使用 200 OK 作为状态代码。它应该返回默认的 nginx 页面,状态代码为 200 OK。

另一种方法是,您可以添加不存在的健康检查网址,例如

/my-health-page
,并在健康检查配置中将预期的健康检查状态代码设置为404。所以我们在这里假设的是,如果nginx正在检查url 并返回
404 NOT FOUND
,Nginx 正在工作。但这个方法不会检查更多的东西。

优点:

  • ALB 能够判断您的实例是否正在运行
  • ALB可以检查nginx是否正在运行

缺点: 健康检查不会识别诸如 php 不工作或 mysql 服务器无法从应用程序访问等情况


0
投票

为了测试或确保服务器正常工作,您可以在成功代码中包含状态代码 404。这有助于向负载均衡器表明一切正常,就像绿色信号一样。

source_codes

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