azure cdn purge 不刷新缓存内容

azure cdn purge not refreshing cached content

我有一个连接到 blob 存储的 Azure CDN(Verizon,premium)。基于此 tutorial 中的第 6 步,我制定了 2 条规则。这些规则旨在强制 CDN 在调用 CDN 的根目录时服务 "index.html"。它们可能与问题相关,也可能不相关,但它们在步骤 6 中的描述如下:

  1. 确保下拉菜单显示“如果”和“始终”
  2. 点击“功能”旁边的“+”按钮两次。
  3. 将两个新创建的下拉菜单设置为“URL重写”
  4. 将所有源和目标下拉列表设置为您创建的端点(具有端点名称的值)
  5. 对于第一个源模式,设置为 ((?:[^\?]/)?)($|\?.)
  6. 对于第一个目标模式,设置为 $1index.html$2
  7. 对于第二个源模式,设置为 ((?:[^\?]/)?[^\?/.]+)($|\?. )
  8. 对于第二个目标模式,设置为 $1/index.html$2

我最初将文件上传到 blob 存储,能够通过 CDN 访问它们(证明上述规则工作正常),然后更改本地文件(调试)以上传到 blob 存储。在更新 blob 存储上的所有文件并手动清除选中 "purge all" 选项的 CDN 端点后,CDN 为我提供旧文件,并在直接访问 blob 存储时为我提供新文件。这似乎对每个文件都会发生(即使直接点击文件,而不仅仅是 index.html)。在等待约 10 小时、清除浏览器缓存并尝试使用以前从未用于访问 CDN 的浏览器后,这种情况仍然会发生。

有谁知道可能发生了什么?它是否缓存在我的网络和 CDN 端点之间的某个位置?我觉得我可能遗漏了一些非常简单的东西......

编辑 1:我有另一个 Verizon(非高级)CDN 连接到同一个存储容器,它在清除后选择了正确的文件;然而,即使现在(24 小时后)高级 CDN 也没有提供更新的文件。

编辑 2:致电 Microsoft 支持 Azure,他们花了大约 6 个小时调查无果。我们最终再次尝试清除,现在正在发送更新的文件。仍然不确定是什么问题。

现在一切正常吗? 我看到您的规则可能比您需要的更复杂。如果目标只是将根“/”重写为 /index.html,这是您唯一需要的规则:

如果总是 URL重写-来源:“/”;目的地“/index.html”

在与 Microsoft 和 Verizon Digital Media 支持部门合作数周后,他们终于找到了解决方案。

为了避免干扰清除过程,最简单的方法是在规则的 "Features" 部分之前实施以下 "IF" 语句:

如果|请求 Header 通配符 |名称 | User-Agent |不匹配 |价值观 | ECPurge/* |忽略大小写(选中)

对于使用清除用户代理发出的请求,此 if 语句将完全跳过此规则,从而允许请求正常访问 CDN。

我还发现,如果您分别清除每个文件,例如,在清除时将 /css/main.css 放入 'Content path' 而不是 'purge all' 它将起作用

10/14/2019 - 使用类似的设置 (Azure CDN/Blob-Static-Site/Verizon),我也遇到了缓存问题。我碰巧只有 1 URL 重写规则。为我解决的是设置关于 caching/Max-Age 的后续规则。

我是这样做的: Azure 门户 -> CDN 配置文件 -> 单击您的配置文件(概述部分)

  1. 单击概述中的管理图标(在详细信息中 section/blade)。这应该 打开 craptastic Verizon 页面。
  2. 将鼠标悬停在 "Http Large" 上,然后单击规则引擎
  3. 在文本框中输入 Name/Description。例如:"Force Cache Refresh"
  4. 选择 If/Always
  5. 单击“功能”旁边的“+”按钮
  6. 在出现的新下拉列表中选择 "Force Internal Max-Age"(保留 200 作为响应)
  7. 在字段中为秒输入一个合理的*值。 (例如300)
  8. 点击黑色的添加按钮

它说这条规则可能需要 4 个小时才能生效,对我来说大约是 2 个小时。

最后,对于此方法,规则的顺序无关紧要,但对于上述重写规则,请记住这些规则允许您上下移动它们的优先级。对我来说,首先是 Https 重定向,然后是 Url 重写(对于 "React-routing")。最后是强制缓存刷新。

*注意:这是一种平衡,因为清除对我不起作用,您希望静态 (app/site) 在发布后更新,但您不希望有大量不必要的流量刷新缓存。对于我的开发服务器,我稳定了 5 分钟。我想生产将是1小时...还没有决定。