我已将我的linux apache网络服务器运行在谷歌负载均衡器后面的GCP上。因为我只想要https流量,所以我将端口80重定向到443,如下所示:
<VirtualHost *:80>
ServerName spawnparty.com
ServerAlias www.spawnparty.com
DocumentRoot /var/www/html/wwwroot
Redirect permanent / https://www.spawnparty.com
</VirtualHost>
我已经给vm一个外部ip地址,以测试重定向是否有效。
然后我配置了负载均衡器。我已经做到这一点,以便frondend同时接受http和https。对于后端,我提供了2项服务:
使用http的一个和使用https的一个,这样如果somoeone通过http进入,它将被转发,然后通过上面显示的代码重定向到https。
对两个后端服务进行基本健康检查:
对于http:port:80,超时:5s,检查间隔:5s,不健康 阈值:2次尝试
for https:port:443,timeout:5s,check interval:5s,不健康 阈值:2次尝试
https一个正常工作,并指出1个实例中的1个健康,但http运行状况检查表明0个实例健康
如果将健康状况检查从http更改为https并再次返回http后端服务,它会在短时间内工作,但几分钟后它会再次声明1个实例的0。
为了保持健康,我必须改变什么?
答案 0 :(得分:0)
将健康检查页以外的所有内容重定向到HTTPS。 How to force rewrite to HTTPS except for a few pages in Apache?问题解释了如何做到这一点。 GCE Network load balancing提及此要求,并说“即使您的服务不使用HTTP,您也需要至少在运行状况检查系统可以查询的每个实例上运行基本Web服务器。”
答案 1 :(得分:0)
TL; DR - 对后端服务使用相同的HTTPS运行状况检查。
您需要回复200
响应代码,并在配置的时间段内正常关闭连接。
HTTP and HTTPS health checks
如果从负载均衡器到您的实例的流量使用HTTP或 HTTPS协议,然后HTTP或HTTPS运行状况检查验证 实例是健康的,Web服务器已启动并正在为流量提供服务。
对于HTTP(S)运行状况检查探测被认为是成功的, 实例必须返回代码为200的有效HTTP响应并关闭 通常在配置的时间段内连接。如果它这样做了 连续指定的次数,运行状况检查返回状态 这个例子的健康。如果实例失败了指定的数字 健康检查探测连续,它没有任何标记为UNHEALTHY 发送通知。不健康的情况不会收到新的 连接,但允许现有连接继续。 不健康的情况继续接受健康检查探测。如果 实例稍后通过成功响应a来传递运行状况检查 指定的连续健康检查探针的数量,它被标记 健康,并开始接收新的联系,再没有任何 通知。
由于您有2个独立的后端服务(一个用于HTTP而另一个用于HTTPS),您将需要2个运行状况检查(尽管后端服务允许在需要时重用相同的运行状况检查 - 请继续阅读),因为负载均衡器认为它们是独立的服务。
正如您已经确认的那样,使用HTTPS运行状况检查将与基于HTTPS的服务一起使用,但使用HTTP运行状况检查则不会。原因是您实际上是为永久URL重定向而不是预期的HTTP 200响应代码返回HTTP 301响应代码。
解决此问题的一种方法是对后端服务使用HTTPS运行状况检查,因为您的基础服务仍然相同。您失去了运行状况检查重定向的能力,但Google Cloud Load Balancer不支持这种情况。您也可以为后端服务共享相同的HTTPS运行状况检查资源。
CharlesB发布的解决方案也可以使用,但我觉得您正在添加额外的重定向规则以满足运行状况检查,并且无论如何都不会在您的服务路径上使用。您还需要一个单独的HTTP运行状况检查资源。我只觉得对后端服务使用HTTPS运行状况检查更加简单,并且还可以验证您的服务是否处于活动状态以处理新请求。