AWS 负载均衡器和维护页面

AWS load balancer and maintenance page

我在 3 台 EC2 服务器上使用 AWS Load Balancer,我试图在站点维护时提供维护页面。

此页面需要 return 503 HTTP 代码,因为它是维护模式的正确代码,可以防止 SEO 可能出现的问题。

当我 return 来自我的任何服务器的 503 代码时,负载平衡器使其成为 "Not In Service",而当所有服务器 return 503 时,网站 return 是一个空白页面(因为所有服务器都断开连接)。

我的问题是:

1) 如果没有健康的服务器,是否有任何方法可以为来自 Load balancer 的访问者提供消息的自定义静态页面?

2) 或者如何配置负载均衡器的健康检查,使其不会将 503 视为将服务器标记为 "unhealthy" 的原因?

谢谢!

您可以在您的应用服务器中实施一个附加路由,比方说 /hcm(用于健康检查维护),它始终响应 200 OK。当需要维护时,您以编程方式修改 ELB 运行状况检查以使用 returns 200 OK 而不是 / 或 /index.html 的 /hcm 目标,这两个 return 503 服务不可用。退出维护时还原这些更改。

当您不再有任何健康的服务器支持时,负载平衡器将为您服务 503,因此您不应该做任何特殊的事情。

如果您 return 除了 200 健康检查之外的任何其他内容,ELB 将在未通过配置的健康检查次数后将机器从负载均衡器中取出。

总而言之,您可以在维护期间从您的应用程序 503 提供服务,但您必须始终 return 200 进行健康检查。如果您不关心页面的内容,您可以简单地从负载均衡器中删除机器(或失败的健康检查),LB 将为您做正确的事情。

可能不符合您的 503 要求,但一个不错的选择是使用 s3 和 dns 故障转移:https://aws.amazon.com/blogs/aws/create-a-backup-website-using-route-53-dns-failover-and-s3-website-hosting/

我一直在寻找一种快速的方法来做到这一点。我们需要在数据库升级过程中 return 向全世界发送 503 错误,但是将一些开发人员的 IP 列入白名单,以便他们可以在重新打开 public.

之前对其进行测试

找到一个单一的解决方案:: 转到 EC2 中的 Loader Balancer 和 select 您想要定位的负载均衡器。在下方,您应该会看到 Listeners。单击侦听器,然后编辑规则。创建这样的规则:

现在每个人都得到了一个漂亮的维护页面 returned,带有 503 错误代码,并且只有第一条规则中的两个 IP 地址才能浏览到该站点。顺序很重要,两个 IP 异常在顶部,然后在列表中下降。默认情况下,最后一项始终存在。

您的应用程序负载均衡器的侦听器规则: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-update-rules.html