繁体   English   中英

AWS ALB 健康检查 404

[英]AWS ALB Health Check 404

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

"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 个实例在同一个和 su.nets 中。 此外,当我检查我的 apache 日志时,这就是我所看到的:

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

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

似乎您不能使用基于名称的虚拟主机进行健康检查。 所以在我的虚拟主机文件中,我添加了以下代码。 它的作用是,如果有人直接访问您的 ip,它会给他们一个 404,但如果他们 go 访问您的 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>

ALB healthcheck 将通过 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 ,这应该对您有用。

由于您在 nginx 中有多个命名主机。您可以尝试在/上设置健康检查,状态代码为 200 OK。 它应该返回默认的 nginx 页面,状态代码为 200 OK。

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

优点:

  • ALB 能够了解您的实例是否正在运行
  • ALB可以查看nginx是否在运行

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM