我有一个静态 Web 应用程序托管在 S3 Bucket 中,目前由 Amazon CloudFront 托管。这是一个旅游网站,所以我希望世界各地的用户都能快速使用它。我还想通过 ACM(Amazon 证书管理器)免费使用 TLS。
实现此目的的最佳实践架构是什么?我并不是想发起讨论或提出开放式问题。请听我说完。
我不太了解 DNS 的工作原理,所以如果我错了,请纠正我。如果我有 GoDaddy DNS 记录到两个 GoDaddy NS 服务器/地址/域/无论它们是什么,这是否意味着任何时候香港用户想要访问我的网站,他们都必须联系那些 GoDaddy DNS 服务器(无论它们在哪里),然后联系 CloudFront 的 DNS 服务器,然后实际联系最近的 CloudFront 服务器并检索我网站的超快本地缓存副本?
您可能已经猜到了,我担心这会降低我网站的访问速度,并且违背了使用 CloudFront 的初衷。这种担心合理吗?我应该如何设置?Route 53 会有所帮助还是会让情况变得更糟?
答案1
如果您的域名已在 GoDaddy 注册,但 DNS 使用 Route53 - 则没有问题。我的简短回答是,这是最快/最好的方法。
以下是我认为 DNS 的工作方式。如果我的理解不正确,我很乐意进行修改或删除答案。
浏览器会查找您的域名的 DNS,该域名位于 GoDaddy DNS 服务器上,无论它们位于何处。对 GoDaddy 进行 DNS 查找以获取 CNAME(这是 AWS CloudFront IP 的别名)可能需要 20 - 200 毫秒。然后,针对 AWS DNS 服务器对第一次 DNS 查找的结果进行另一次 DNS 查找,这很可能会返回 A 记录/IP 地址,这可能需要 10 - 40 毫秒。所以,是的,有两次 DNS 查找。
DNS 服务器是分层的,因此如果您的本地 DNS 服务器没有您需要的记录,则可能需要更长时间。
如果您有 Route53 DNS 记录,则第一次 DNS 查找会更快。CloudFlare 拥有良好的免费套餐,并且拥有非常快速、分布良好的 DNS 系统。
一个小问题是您不能将 CNAME 放在域的根目录(即 example.com),但可以放在子域(即 www.example.com)上。Route53 和 CloudFlare 都提供了解决方法。如果您使用的是 GoDaddy DNS,我不确定它是如何工作的 - 可能是自定义功能,或者您可以让 Web 服务器监听域根目录上的请求,然后执行 301 重定向到 www 子域。不过,这是另一个跳跃。
简短版本:最好使用 Route53,它成本每月 50 美分,另加每百万次查询 40 美分。