AWS ALB运行状况检查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个实例位于同一子网中。 另外,当我检查我的apache日志时,这就是我看到的:

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

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

解决方法

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

另一种方法是,您可以添加不存在的运行状况检查URL,例如/my-health-page,并在运行状况检查配置中将预期的运行状况检查状态代码设置为404。因此,我们假设如果Nginx正在检查URL并返回404 NOT FOUND,Nginx正在工作。但是这种方法只会检查更多内容。

优点:

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

缺点: 运行状况检查不会确定php无法正常工作或无法从应用程序访问mysql服务器等情况。

,

似乎您不能使用基于名称的虚拟主机进行健康检查。因此,在我的vhost文件中,添加了以下代码。它的作用是,如果有人直接进入您的ip,则会给他们一个404,但如果他们进入您的ip / healthcheck,则它将显示ALB所需的200。然后在您的路径中放入/ healthcheck。

import requests
from bs4 import BeautifulSoup
import json
from pandas import DataFrame as df

url = "https://www.lowes.com/Lowes-Stores"
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/61.0.3163.100 Safari/537.36'}

page = requests.get(url,headers=headers)
page.encoding = 'ISO-885901'
soup = BeautifulSoup(page.text,'html.parser')

lowes_list = soup.find_all(class_ = "list unstyled")
for i in lowes_list[:2]:
    print(i)

example = lowes_list[0]
example_content = example.contents
example_content
,

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,这有望对您有用。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...