TLDR:当我创建此 DNS 记录时:
whatever.mydomain.com. IN CNAME biglongjibberstring.r89.cf2.rackcdn.com.
Rackspace 如何知道我选择的这个随机主机名应该转到我的云文件容器/帐户而不是其他客户的?
我刚刚测试了一个使用 Cloud Files 和 Rackspace 的简单示例。我创建了一个 Cloud Files“容器”,并启用了“静态网站”选项。我上传了一个示例图像和一个示例 index.html 文件。此容器中的这些文件现在可以通过这个超长的 URL 访问,UI 告诉我可以将其用作我的域名的 CNAME:
果然,添加了一条 CNAME 记录,如下所示:
whatever.mydomain.com.IN CNAME biglongjibberstring.r89.cf2.rackcdn.com。
浏览至http://whatever.mydomain.com/可以正常工作(测试了主页和图像)。但是,当它看到对“whatever.mydomain.com”的请求(在 HTTP Host 标头中)时,它怎么可能知道该请求是针对我的特定云文件容器的呢?
这似乎与 DNS 有关,因为如果我在 hosts 文件中只输入 biglongjibberstring.r89.cf2.rackcdn.com. 解析到的 IP 地址,则无法正常工作(会给出有关无效 URL 的错误 - 似乎来自 Akamai)。我可能看到这种情况的唯一方法是,如果 whatever.mydomain.com 的 DNS 查找以某种方式将“whatever.mydomain.com”和“biglongjibberstring.r89.cf2.rackcdn.com.”之间的关系传回 Rackspace/Akamai DNS 服务器。但我从未见过这种方法,我甚至认为返回 Rackspace/Akamai 的 DNS 查找实际上不包含此操作所需的信息(尽管我可能错了)。
有人知道这里发生了什么样的黑魔法吗?
答案1
观察了他们的行为后,我对他们可能合理采取的行动的最佳猜测是:
当 HTTP 请求到达其中一个 CDN 节点并且该请求具有未知Host
标头时,它们会自行在标头中查找名称Host
。
如果这个名称指向CNAME
一个已知名称(在表单上<identifyinginformation>.rackcdn.com.
),它们会将标题中的名称Host
与相应的资源关联起来,否则它们会返回错误。
这是推测,但这就是我能想到的符合技术可行性和观察到的行为的方法。Rackspace 的文档没有具体说明它实际上是如何工作的,但希望他们的支持能够有所帮助。
如果有人想自己进一步实验,Rackspace 员工会提到 URLhttp://124f4d373d9886355285-0dddf6f52a326dca397d3ae1202a22fd.r49.cf2.rackcdn.com/1_logs_dir.png作为上面链接的文档页面注释中的示例。只需CNAME
在该 URL 的主机部分添加,相应地修改 URL 并尝试即可。