我们的生产环境存在问题,也许其他人遇到了这个问题并且有一个智能解决方案。
先决条件:
/ui/main_465987ecb75.css
将呈现为//cdn.host.com/ui/main_465987ecb75.css
部署例程:
这就是失败的地方:
在上面的第4步和第5步之间,我们有两台服务器在线短时间。在此期间,server1可以引用main_46eb48ac968.css,server2可以引用main_987eba4687.css。这会在以下情况中引起麻烦......
使用案例
一个简单的解决方案当然是在部署期间没有CDN运行,但由于CDN url在应用程序启动期间被添加到路径之前,我们必须在生产中重新启动应用程序......:/
想法?
答案 0 :(得分:0)
嗯所以你的CDN使用你的网站作为我接受它的起源?
您可能想要查看this issue。这样做是将哈希写入生成的路径中的文件夹,然后您可以使用IIS重写规则从路径中删除该文件夹。这样做是为了提供一个提供的选项“文件名中的哈希”选项的可靠缓存清除,没有文件爆炸。您可以使用它来确保提供某些 - 但在这种情况下,它会在您的CDN缓存中留下旧文件版本(因此您需要在完成部署后使所有内容无效) )。
这将在下一版本(0.9.3)中提供
答案 1 :(得分:0)
回答@AlexCuse
是的,我们的CDN使用该网站作为原点。
实际上我建议使用hash-as-virtual-folder-solution :)我们使用该解决方案,直到我们部署到我们发现此问题的多前端服务器环境。在您没有CDN 和多个前端服务器的环境中,这是缓存文件的绝佳方式。不幸的是我们都有。
如果我们使用hash-as-virtual-folder解决方案,旧文件将在50%的情况下使用新URL,两个服务器在线的时间很短,一个服务器使用旧代码,另一个服务器使用旧文件新代码。我们确实可以在部署后刷新CDN,但这对于已经下载错误文件的客户端没有帮助,因为它的最大年龄为365天,并且在客户端点击ctrl + F5之前不会更新。而我们无法控制这一点。废话。 ;)
所以,到目前为止,我们的决定是,用户在一分钟内没有CSS / JS就可以获得一个糟糕的网站(如果他是第一个访问者 点击“错误的”服务器)而不是缓存错误的文件,在下次部署之前不会更新。
我们还对代码进行了一些更改,现在我们可以在服务器处于生产状态时禁用CDN,而无需通过删除在http缓存中存储CDN URL的密钥来回收应用程序池。这有点单调乏味,因为它涉及登录CMS,进行更改,保存,发布然后更改,但这是可能的。
非常感谢,这是一个很棒的图书馆!