19

我正在使用带有 3 个 EC2 服务器的 AWS 负载均衡器,并且我正在尝试在站点处于维护状态时提供维护页面。

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

当我从任何服务器返回 503 代码时,负载均衡器将其设为“未服务”,当所有服务器返回 503 时,网站返回空白页面(因为所有服务器都已断开连接)。

我的问题是:

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

2)或者如何配置负载均衡器的健康检查,它不会将503作为将服务器标记为“不健康”的原因?

谢谢!

4

4 回答 4

15

我一直在寻找一种快速的方法来做到这一点。我们需要在数据库升级期间向世界返回一个 503 错误,但将一些开发人员的 IP 列入白名单,以便他们可以在开放备份之前对其进行测试。

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

我的规则设置 现在每个人都会得到一个漂亮的维护页面,返回一个 503 错误代码,并且第一条规则中只有两个 IP 地址可以浏览到该站点。顺序很重要,两个 IP 例外在顶部,然后在列表中。默认情况下,最后一项始终存在。

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

于 2020-01-16T19:30:46.733 回答
13

你可以在你的应用服务器中实现一个额外的路由,比如说 /hcm(用于健康检查维护),它总是响应 200 OK。当需要维护时,您可以通过编程方式修改 ELB 运行状况检查以使用返回 200 OK 的 /hcm 目标,而不是返回 503 Service Unavailable 的 / 或 /index.html。退出维护时恢复这些更改。

于 2015-09-02T01:52:34.633 回答
6

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

于 2015-09-02T07:49:30.107 回答
1

503当您背后不再有任何健康的服务器时,负载均衡器将为您提供服务,因此您不应该做任何特别的事情。

如果您200在运行状况检查中返回 a 以外的任何内容,ELB 将在机器未通过配置的运行状况检查次数后将其从负载均衡器中取出。

因此,回顾一下,您可以503在维护期间从您的应用程序中提供服务,但您必须始终返回200进行健康检查。如果您不关心页面的内容,您可以简单地从负载均衡器中删除机器(或未通过健康检查),LB 会为您做正确的事情。

于 2015-09-02T04:40:04.720 回答