具有 SAS 令牌缓存机制的 Azure CDN

Azure CDN with SAS token caching mechanism

我有一个 public 访问受限的 blob 容器。 Azure CDN 建立在它之上。请找到下面的例子

缓存持续时间:24 小时

Azure 存储 URL:http://azstorage5.blob.core.windows.net/images/img15.jpg

CDN 终结点:http://az507925.vo.msecnd.net/

Azure 存储 SAS 参数:?st=2020-12-07T19%3A21%3A09Z&se=2020-12-08T20%3A21%3A09Z&sr=c&sp=r&sig=STTE1p0ujzZr31ZjPaOlNoImCPcjss2GoRsOWDlpJuI%3D

最终 CDN URL:http://az507925.vo.msecnd.net/images/img1.jpg?st=2020-12-07T19%3A21%3A09Z&se=2020-12-08T20%3A21%3A09Z&sr=c&sp=r&sig=STTE1p0ujzZr31ZjPaOlNoImCPcjss2GoRsOWDlpJuI%3D

如果我在 CDN

中将缓存行为设置为 Ignore query strings

问题:第一次尝试访问图像img15.jpg时,它将从blob容器中检索并缓存在CDN中。如果我在缓存过期(24 小时)期间使用不同的有效 SAS 令牌多次访问 img15.jpg,它会从缓存中提供还是会从 blob 容器中获取每个唯一的有效 SAS 令牌?

最终目标:我希望将图像缓存在 CDN 上,并且应该能够使用有效的 SAS 令牌访问它,但只要缓存不命中 blob 容器没有过期。这是一个可能的用例场景吗?

对于您的问题,如果对同一个 blob(如 blob1)使用不同的有效 SAS 令牌,则具有不同 SAS 令牌的 blob1 将在第一次访问时直接从 blob 容器中获取。

比如先用blob1?sastoken1访问,再用blob1?sastoken2访问,此时会直接从blob容器中取出blob1?sastoken2。

我建议你可以使用相同的sastoken,或者你可以定义一个stored access policy来访问blob。

如果您将 CDN 配置为缓存每个 sas 字符串,则预计不会缓存文件,因为对于 CDN 它们是不同的文件。

如果您配置为忽略 sas 字符串,这将导致未经身份验证的用户访问缓存文件(只需省略参数,或在此处粘贴垃圾)。

这里的解决方法是正确构造sas字符串。

您可以为今天所有客户端的文件提供相同的参数: 访问开始时间 00:00 今天, 结束时间第二天结束。

这将使今天请求文件的所有客户端都有缓存副本,并提前一天完成下载。