17

我将 CNAME 与 S3/CloudFront 一起使用来提供一些静态文件,如 js、css、图像等。

我这样做是为了使存储桶的 URL 漂亮,因为我认为最好将所有目标都定位到我的网站,以防将来我想移动这些文件,更改应该是透明的。

今天阅读博客,我看到一些人认为 CNAME 不利于速度。

那么,该怎么想呢?

4

4 回答 4

15

CNAMES 使用 DNS 查找添加了另一层间接性,因此会产生一些惩罚。但是,一旦通过 DNS 查找了 IP,它应该保持缓存状态,并且该客户端不应再发生惩罚。

确保在您的 DNS 条目中正确设置到期时间,您应该不会看到任何明显的延迟。

于 2009-04-14T17:29:05.117 回答
15

根据其他答案,使用 CNAME 只会导致非常小的额外 DNS 解析延迟,并且只有当结果尚未在递归 DNS 服务器的缓存中时。

请注意,DNS 客户端通常不会明确要求 CNAME 记录。通常,他们会询问他们实际想要的任何记录类型——对于一个将是一个AAAAA记录的网络浏览器。

上游服务器的工作就是识别出被查询的域名里面有CNAME条目,然后查找并返回目标结果。在这种情况下,CNAME 记录和所需结果都会在 DNS 响应的答复部分中返回(而不是在其他人回答的附加部分中)。

为获得最佳性能,最好将 CNAME 的目标托管在与包含 CNAME 的域名相同的权威 DNS 服务器上,以便无需进一步的 DNS 请求即可完成 CNAME 解析。

于 2009-04-14T18:10:16.047 回答
9

在大多数情况下,使用 CNAME 的影响非常小。DNS 响应格式允许服务器在消息中添加一些额外的数据,并且在很多情况下,当您查找 CNAME 记录时,服务器会在附加数据部分添加相应的 A 记录,因此无需再查找。

于 2009-04-14T17:44:15.983 回答
5

使用 CNAMES 需要注意的一件事是,如果 CNAME 的目标未缓存,则需要再次查找,正如 Ben S 所说。

但是,如果 CNAME 的目标是另一个 CNAME,那么它将需要 YET ANOTHER 查找,令人作呕。

我建议不要将您的 CNAME 指向另一个 CNAME。

于 2009-04-14T17:32:47.853 回答