我在创业公司的工作中学习AWS和Cloudfront(CF)。由于时间限制,大多数学习不是非常系统化(不深入)。我无法找到解决方案的一个问题。我的CF发行版链接到一个S3存储桶,其中包含所有资产(CSS,JS文件等)。存储桶中的文件名如下所示:
我们在某些时候覆盖了大学的CDN,我记得他们计算了文件的哈希并使用这些哈希来找到"找到"服务器的位置(IP)(在分发中,类似于DNS中的名称解析),该文件将在其中提供服务。也许我误解了那一部分?
因此问题:
此外,值得注意的是,在某些时候部署是使用capistrano
(是的,它的Rails)完成的,它使用asset_sync
gem将资产推送到S3。但是,在新产品上我们没有使用它 - 只对所有资产进行版本控制。
答案 0 :(得分:3)
- CF服务的名称中的字母数字序列是什么?那是哈希吗?
是的。 32字节散列,可能是SHA-256。
- 谁计算该值:CF,S3或部署过程?
没有一个。这实际上是Rails的一部分 - 它添加了一个'版本'哈希到您的文件名,以便您可以发送远期到期的HTTP标头(例如,您可以说客户端浏览器"缓存此文件,并且您不需要再次从服务器获取它一年")。
在没有哈希的情况下这样做会在更新资产时产生地狱,因为每个用户都必须硬重新加载(没有缓存)才能获得新版本。如果您更改版本哈希,并链接到新HTML头中的那个,那么 浏览器再次取回它,因为它是一个新文件。
- 为什么有时这个值会有所不同,导致服务器上出现404错误?
见上文。哈希值随您发布的每个版本的资产而变化;如果有人试图获取旧资产或者您的S3存储桶中不再存在哈希值的资产,则会产生404。