我有一个目标组中有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"
我做错了什么,导致健康检查失败?
答案 0 :(得分:1)
由于nginx中有多个命名主机。您可以尝试在/
上设置运行状况检查,并以200 OK作为状态代码。它应返回状态代码为200 OK的默认nginx页面。
另一种方法是,您可以添加不存在的运行状况检查URL,例如/my-health-page
,并在运行状况检查配置中将预期的运行状况检查状态代码设置为404。因此,我们假设如果Nginx正在检查URL并返回404 NOT FOUND
,Nginx正在工作。但是这种方法只会检查更多内容。
优点:
缺点: 运行状况检查不会确定php无法正常工作或无法从应用程序访问mysql服务器等情况。
答案 1 :(得分:1)
似乎您不能使用基于名称的虚拟主机进行健康检查。因此,在我的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
答案 2 :(得分:0)
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
,这有望对您有用。