我正在使用AWS Load Balancer和3台EC2服务器,而我正在尝试在网站维护时提供维护页面。
此页面需要返回503 HTTP代码,因为它是维护模式的正确代码,可以防止SEO出现问题。
当我从任何服务器返回503代码时,Load Balancer将其设置为“Not In Service”,当所有服务器返回503时,网站返回一个空白页面(因为所有服务器都已断开连接)。
我的问题是:
1)如果没有健康的服务器,是否有任何方法可以为来自负载均衡器的访问者提供带有消息的自定义静态页面?
2)或者如何配置Load Balancer的健康检查,它不会将503视为将服务器标记为“不健康”的原因?
谢谢!
答案 0 :(得分:12)
你可以在app服务器中实现一个额外的路由,比方说/ hcm(用于健康检查维护),总是响应200 OK。在维护时,您以编程方式修改ELB运行状况检查以使用/ hcm目标,该目标返回200 OK而不是/或/index.html,这两者都返回503 Service Unavailable。退出维护时还原这些更改。
答案 1 :(得分:5)
可能无法满足您的503要求,但对此更好的选择是使用s3和dns故障转移:https://aws.amazon.com/blogs/aws/create-a-backup-website-using-route-53-dns-failover-and-s3-website-hosting/
答案 2 :(得分:5)
我一直在寻找一种快速的方法来做到这一点。在数据库升级期间,我们需要向世界返回503错误,但白名单列出了一些开发人员的IP,以便他们在重新公开之前可以对其进行测试。
找到了一个单点解决方案:: 转到EC2中的Loader Balancer,然后选择要定位的负载均衡器。在下面,您应该看到监听器。单击一个侦听器,然后编辑规则。创建如下规则:
现在,每个人都会获得一个漂亮的维护页面,并返回503错误代码,并且第一个规则中只有两个IP地址将能够浏览到该站点。顺序很重要,两个IP例外在最上面,然后在列表中排在后面。默认情况下,最后一项始终存在。
您的应用程序负载平衡器的侦听器规则: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-update-rules.html
答案 3 :(得分:0)
当您不再拥有任何健康的服务器时,负载均衡器将为您提供503
,因此您不应该做任何特别的事情。
如果在运行状况检查中返回除200
之外的任何内容,ELB将在配置的运行状况检查失败后将机器从负载均衡器中取出。
回顾一下,在维护时,您可以从应用中提供503
,但您必须始终返回200
进行运行状况检查。如果您不关心页面内容,只需从负载均衡器中删除计算机(或运行状况检查失败),LB就会为您做正确的事。