跳至内容

为什么即使网站运行正常,Lightsail 负载均衡器运行状况检查仍然失败?

2 分钟阅读
0

我正在为具有 Bitnami 堆栈的 Lightsail 实例使用 Amazon Lightsail 负载均衡器。即使网站运行正常,负载均衡器运行状况检查仍失败。

简短描述

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

WordPress Multisite 实例上也可能会出现同样的问题,因为默认情况下,这些实例会将 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 Multisite 堆栈实例。

设置重定向使用的是 WordPress 应用程序插件

在您网站的文档根目录中创建一个 HTML 文件。然后,修改负载均衡器运行状况检查配置,将 HTML 文件添加为运行状况检查文件。由于应用程序级重定向仅影响属于原始应用程序的 HTML 文件,因此必须将 HMTL 文件添加为运行状况检查文件。

  1. 连接到 Lightsail 实例

  2. 导航到您存储网站文件的网站的文档根位置:
    在方法 A 下的 Bitnami 堆栈中,文档的根位置为 /opt/bitnami/APPNAME/(例如,/opt/bitnami/wordpress)。
    在 Approach B 下的 Bitnami 堆栈中,文档的根位置为 /opt/bitnami/apps/APPNAME/htdocs(例如,/opt/bitnami/apps/wordpress/htdocs)。
    在 LAMP Bitnami 堆栈中,文档的根位置为 /opt/bitnami/apache2/htdocs

  3. 要么上传一个空的 HTML 文件,要么运行以下命令来创建空的 HTML 文件:

    touch health.html
  4. 打开 Lightsail 控制台

  5. 选择网络

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

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

  8. 输入路径 health.html,然后选择保存

  9. 确保 http://ipaddress:80/health.html 返回 200 OK 响应结果。在 KeyCDN 网站上使用 HTTP 标头检查工具

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

设置重定向使用的是 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.conf 以及 /opt/bitnami/apache2/conf/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 返回 200 OK 响应结果。在 KeyCDN 网站上使用此 HTTP 标头检查工具

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

您使用的是 WordPress Multisite 堆栈实例

要解决此问题,请完成以下步骤:

  1. 完成设置重定向使用的是 WordPress 应用程序插件 部分中的第 1-7 步。

  2. 打开 /opt/bitnami/apache2/conf/vhosts/wordpress-vhost.conf 文件,然后在 # BEGIN nip.io 重定向下添加以下行:

    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 返回 200 OK 响应结果。在 KeyCDN 网站上使用此 HTTP 标头检查工具

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

AWS 官方已更新 2 年前