我将 CNAME 与 S3/CloudFront 一起使用来提供一些静态文件,如 js、css、图像等。
我这样做是为了使存储桶的 URL 漂亮,因为我认为最好将所有目标都定位到我的网站,以防将来我想移动这些文件,更改应该是透明的。
今天阅读博客,我看到一些人认为 CNAME 不利于速度。
那么,该怎么想呢?
我将 CNAME 与 S3/CloudFront 一起使用来提供一些静态文件,如 js、css、图像等。
我这样做是为了使存储桶的 URL 漂亮,因为我认为最好将所有目标都定位到我的网站,以防将来我想移动这些文件,更改应该是透明的。
今天阅读博客,我看到一些人认为 CNAME 不利于速度。
那么,该怎么想呢?
CNAMES 使用 DNS 查找添加了另一层间接性,因此会产生一些惩罚。但是,一旦通过 DNS 查找了 IP,它应该保持缓存状态,并且该客户端不应再发生惩罚。
确保在您的 DNS 条目中正确设置到期时间,您应该不会看到任何明显的延迟。
根据其他答案,使用 CNAME 只会导致非常小的额外 DNS 解析延迟,并且只有当结果尚未在递归 DNS 服务器的缓存中时。
请注意,DNS 客户端通常不会明确要求 CNAME 记录。通常,他们会询问他们实际想要的任何记录类型——对于一个将是一个A
或AAAA
记录的网络浏览器。
上游服务器的工作就是识别出被查询的域名里面有CNAME条目,然后查找并返回目标结果。在这种情况下,CNAME 记录和所需结果都会在 DNS 响应的答复部分中返回(而不是在其他人回答的附加部分中)。
为获得最佳性能,最好将 CNAME 的目标托管在与包含 CNAME 的域名相同的权威 DNS 服务器上,以便无需进一步的 DNS 请求即可完成 CNAME 解析。
在大多数情况下,使用 CNAME 的影响非常小。DNS 响应格式允许服务器在消息中添加一些额外的数据,并且在很多情况下,当您查找 CNAME 记录时,服务器会在附加数据部分添加相应的 A 记录,因此无需再查找。
使用 CNAMES 需要注意的一件事是,如果 CNAME 的目标未缓存,则需要再次查找,正如 Ben S 所说。
但是,如果 CNAME 的目标是另一个 CNAME,那么它将需要 YET ANOTHER 查找,令人作呕。
我建议不要将您的 CNAME 指向另一个 CNAME。