AWS ELB“抱歉,站点已关闭”页面

std*_*ave 11 amazon-web-services elastic-beanstalk

我有一个基本的 ELB v2 站点。还没有聚类或任何东西。我对 AWS 非常缺乏经验。

我的堆栈是 nginx/uwsgi/django + 一些其他服务。

我想知道是否有人想过制作“对不起,网站目前已关闭...”样式的页面(我可以更新计划的停机时间的自定义文本是一种奖励!)无论何时出现停机,以及实例是红色的。亚马逊似乎没有提供这种功能 - 我错过了什么吗?有没有办法创建一个单独的超小型实例,该实例仅在主要实例为红色或其他情况时提供服务?

谢谢!

Mic*_*bot 25

这里简单而酷的解决方案是将您的 ELB 置于 CloudFront 之后。

如果源服务器(在本例中为 ELB)抛出 5XX 错误(或 4XX,如果您愿意),CloudFront 可以返回自定义错误页面,您可以将 CloudFront 配置为通过创建指向 S3 存储桶的第二个源来获取存储桶并创建缓存行为路由(例如)/errors/static/*到存储桶。

由于一个重要原因,这比 Route 53 故障转移更有效......这是一个致命的缺陷,如果你愿意......浏览器缓存 DNS 查找的时间比你预期的要长得多。DNS TTL 不相关。

本质上,一旦浏览器掌握了 DNS 条目,它就会不断尝试使用它……通常,直到关闭所有浏览器窗口。

因此,如果您的网站因已经在该网站上的访问者而关闭,他们就不太可能看到备用网站。

更糟糕的是,如果访问者在网站关闭时第一次访问您的网站,他们会“停留”在维护页面上,直到他们关闭所有浏览器窗口。

如果您使用故障转移 DNS,那么只有当故障转移目标仍然是您的应用程序(可能只是更远)时,这确实很好。

如果不需要,您可以关闭 CloudFront 的缓存。

您还可以将 CloudFront 的错误缓存 TTL 配置为非零值,如果您希望它在站点关闭并尝试恢复时停止攻击您的站点。对于抛出错误的给定页面,它会一直显示错误页面,并且不会通过对该页面的更多请求来打扰您的服务器,直到 Error CachingTTL 到期。


Tim*_*Tim 6

使用 Route53 DNS 和故障转移路由。您应该能够建立一个托管单页静态网站的 S3 存储桶。我认为你不能只用 ELB 来做到这一点。

亚马逊有一篇博客文章告诉您如何在此处进行操作

更新:正如迈克尔所说,浏览器 DNS 缓存有一个缺点,请参阅他的回答以获取更多信息。Route 53 可能是比 CloudFront 更简单的选项,但 CF 具有其他优势,性能和在某些用例中可以降低成本。