Amazon web services AWS ALB健康检查404

Amazon web services AWS ALB健康检查404,amazon-web-services,apache,amazon-ec2,aws-load-balancer,aws-alb,Amazon Web Services,Apache,Amazon Ec2,Aws Load Balancer,Aws Alb,我有一个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,它会显示这一点,我认为这应该是所有健康检查

我有一个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");
?>

我做错了什么导致healthcheck失败?

ALB healthcheck将通过web界面访问您的healthcheck.php,并且不知道文件在文件系统中的位置。此值必须是主机名后的URI路径

将healthcheck配置为
/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路径更新为
/healthcheck.php
,希望这对您有用。

因为nginx中有多个命名主机。您可以尝试将
/
上的healthcheck设置为200 OK作为状态代码。它应该返回默认的nginx页面,状态代码为200ok

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

优点:

  • ALB能够确定您的实例是否正在运行
  • ALB可以检查nginx是否正在运行
缺点:
运行状况检查无法识别这些情况,例如php不工作或无法从应用程序访问mysql服务器等,似乎无法使用基于名称的vhost进行运行状况检查。因此,在我的vhost文件中,我添加了以下代码。它的作用是,如果有人直接进入你的ip,它会给他们一个404,但如果他们进入你的ip/健康检查,那么它会显示一个200,这是ALB需要的。然后在你的道路上放上健康检查

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

服务器名默认值
重写规则“/健康检查”-[R=200]
重定向404/
重写规则“/健康检查”-[R=200]
重定向404/

您的健康检查在哪个端口ping?检查ALB和EC2上的安全组,查看您在运行状况检查中ping的开放端口。我正在ping 80,这是我的web服务器,因此我知道它是开放的。由于我使用vhosts,它如何知道要检查哪个网站?它将流量转发到指定端口上的EC2实例,并且该实例上的web服务应配置为通过该端口上的请求服务您的网站。HTTP URI到返回内容的映射是web服务器(即apache、nginx、php)的工作。是的,它已配置,但我在该实例上托管了大约20个网站。你说ALB知道检查。如果我放在路径中的都是healthcheck.php,它怎么知道要检查这个url呢?通常,如果你在同一台服务器上托管了很多东西,那么区别就在于端口。。。您的每个网站是否配置为使用不同的端口?如果没有,网站是否通过路径进行区分?如果它们是通过路径区分的,并且根文件夹只是默认文件夹(
var/www/html
),那么healthcheck的正确值将类似于
/generic/website.com/healthcheck.php
您在访问日志中获得的内容是有意义的。。。您是否有一个有效的路径示例?例如,如果您想从本地主机获得响应,您会使用什么路径?例如,如果您被送到机器上并执行
curlhttp://localhost:80/??/healthcheck.php
的值是多少?
?如果你有答案的话,那将是你在健康检查中的相同路径
<VirtualHost *:80>
  ServerName default
  RewriteRule "/healthcheck" - [R=200]
  Redirect 404 /
</VirtualHost>
<VirtualHost _default_:80>
  RewriteRule "/healthcheck" - [R=200]
  Redirect 404 /
</VirtualHost>