我正在为具有 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 文件添加为运行状况检查文件。
-
连接到 Lightsail 实例。
-
导航到您存储网站文件的网站的文档根位置:
在方法 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。
-
要么上传一个空的 HTML 文件,要么运行以下命令来创建空的 HTML 文件:
touch health.html
-
打开 Lightsail 控制台。
-
选择网络。
-
选择您的负载均衡器。
-
在目标实例选项卡上,选择自定义运行状况检查。
-
输入路径 health.html,然后选择保存。
-
确保 http://ipaddress:80/health.html 返回 200 OK 响应结果。在 KeyCDN 网站上使用 HTTP 标头检查工具。
-
等待几分钟,然后验证运行状况检查是否通过。
设置重定向使用的是 Web 服务器重定向规则
在 Web 服务器重定向规则中添加例外规则,以便仅重定向原始网站文件,而不重定向运行状况检查文件。
-
完成设置重定向使用的是 WordPress 应用程序插件 部分中的第 1-7 步。
-
打开您在其中添加了 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。
-
重启 Web 服务:
sudo /opt/bitnami/ctlscript.sh restart
-
确保 http://ipaddress:80/health.html 返回 200 OK 响应结果。在 KeyCDN 网站上使用此 HTTP 标头检查工具。
-
等待几分钟,然后验证运行状况检查是否通过。
您使用的是 WordPress Multisite 堆栈实例
要解决此问题,请完成以下步骤:
-
完成设置重定向使用的是 WordPress 应用程序插件 部分中的第 1-7 步。
-
打开 /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
-
重启 Web 服务:
sudo /opt/bitnami/ctlscript.sh restart
-
确保 http://ipaddress:80/health.html 返回 200 OK 响应结果。在 KeyCDN 网站上使用此 HTTP 标头检查工具。
-
等待几分钟,然后验证运行状况检查是否通过。