为什么即使网站正常运行,我的 Lightsail 负载均衡器仍未通过运行状况检查?

2 分钟阅读
0

我将 Amazon Lightsail 负载均衡器用于带有 Bitnami 堆栈的 Amazon Lightsail 实例。为什么即使网站正常运行,负载均衡器仍未通过运行状况检查? 如何防止负载均衡器运行状况检查失败?

简短描述

Lightsail 负载均衡器通过检查 URL http://ipaddress:80/healthcheckpath 的响应来执行运行状况检查。如果响应状态代码为 200 OK,则运行状况检查将通过。此响应检查在 Lightsail 负载均衡器中不可自定义。如果您的实例强制执行 HTTPS 重新导向,那么 http://ipaddress:80/healthcheckpath 将返回 301 或 302 响应状态代码,而不是 200 OK。这会导致运行状况检查失败。

在 WordPress 多站点实例上可能会出现同样的问题,因为这些实例原定设置情况下将 URL http://ipaddress:80/healthcheckpath 重新导向到 http://ipaddress.nip.io/healthcheckpath。

解决方法

**注意:**以下解析步骤中的文件路径可能会发生变化,具体取决于 Bitnami 堆栈是使用本机 Linux 系统软件包(方法 A)还是自包含安装(方法 B)。要识别您的 Bitnami 安装类型,请运行以下命令:

test ! -f "/opt/bitnami/common/bin/openssl" && echo "Approach A: Using system packages." || echo "Approach B: Self-contained installation."

用于解决此问题的步骤因以下情况而异:

  • 重新导向是使用 WordPress 应用程序插件设置的,例如 Really Simple SSL。
  • 重新导向是使用 Web 服务器重定向规则设置的。
  • 您正在使用 WordPress 多站点堆栈实例。

重新导向是使用 WordPress 应用程序插件而设置的

在网站的文档根目录中创建一个 HTML 文件。然后修改负载均衡器运行状况检查配置,将该文件添加为运行状况检查文件。您必须使用此方法,因为应用程序级重新导向通常不会影响最初不属于应用程序的 HTML 文件。

1.    连接到您的 Lightsail 实例。

2.    导航到存储网站文件的网站的“文档”(Document) 根目录位置。

在方法 A 下的 Bitnami 堆栈中,文档的根位置是 /opt/bitnami/appName/(例如,/opt/bitnami/wordpress)。

在方法 B 下的 Bitnami 堆栈中,文档的根位置是 /opt/bitnami/应用程序/ 应用程序名称 /htdocs**(例如,/opt/bitnami/apps/wordpress/htdocs**)。

在 LAMP Bitnami 堆栈中,文档的根目录位置是 /opt/bitnami/apache2/htdocs

3.    通过上载或运行以下命令来创建一个空的 HTML 文件:

touch health.html

4.    转到 Lightsail 主页,然后选择联网

5.    选择您的负载均衡器。

6.    在目标实例选项卡上,选择自定义运行状况检查

7.    键入路径 health.html,然后选择保存

8.    确保 http://ipaddress:80/health.html 使用 HTTP 标头检查器返回 200OK 响应。

9.    等待几分钟,然后验证运行状况检查是否通过。

使用 Web 服务器重定向规则设置重新导向

在 Web 服务器重新导向规则中为运行状况检查文件添加例外规则,以便只重新导向原始网站文件,而不会重新导向运行状况检查文件。

1.    按照使用 WordPress 应用程序插件设置重新导向部分中的步骤 1 到 7 进行操作。

2.    打开添加了 HTTPS 重新导向规则的 Web 服务器文件,然后在以 RewriteRule 开头的行之前添加以下行:

RewriteCond expr "! %{REQUEST_URI} -strmatch '*health.html’ "

以下是重新导向规则示例:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond expr "! %{REQUEST_URI} -strmatch '*health.html’ "
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

在以下位置对规则进行上述更改:

方法 A 下的 Bitnami 堆栈:/opt/bitnami/apache2/conf/bitnami/bitnami/bitnami/bitnami.conf 以及 /opt/bitnami/apache2/conf/vhosts/ 目录中以前缀 -vhost**.conf** 结尾的任何文件。

方法 B 下的 Bitnami 堆栈:/opt/bitnami/apache2/conf/bitnami/bitnami.conf

3.    重新启动 Web 服务。

sudo /opt/bitnami/ctlscript.sh restart

4.    确保 http://ipaddress:80/health.html 使用此 HTTP 标头检查器返回 200OK 响应。

5.    等待几分钟,然后验证运行状况检查是否通过。

您正在使用 WordPress 多站点堆栈实例

原定设置情况下,WordPress 多站点会将网址 http://ipaddress:80/healthcheckpath 重新导向到 http://ipaddress.nip.io/healthcheckpath。要解决此问题,请执行以下操作:

1.    按照使用 WordPress 应用程序插件设置重新导向部分中的步骤 1 到 7 进行操作。

2.    打开文件 /opt/bitnami/apache2/conf/vhosts/wordpress-vhost.conf 并在 # BEGIN nip.io redirection 部分下添加以下行:

RewriteCond expr "! %{REQUEST_URI} -strmatch '*health.html' "

以下是添加了该行的规则示例:

# BEGIN nip.io redirection
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})(:[0-9]{1,5})?$
RewriteCond expr "! %{REQUEST_URI} -strmatch '*health.html'"
RewriteRule ^/?(.*) %{REQUEST_SCHEME}://%1.nip.io%2/$1 [L,R=302,NE]
# END nip.io redirection

3.    重新启动 Web 服务。

sudo /opt/bitnami/ctlscript.sh restart

4.    确保 http://ipaddress:80/health.html 使用此 HTTP 标头检查器返回 200OK 响应。

5.    等待几分钟,然后验证运行状况检查是否通过。


AWS 官方
AWS 官方已更新 3 年前