【问题标题】:How do I force Azure CDN content to be purged or invalidated?如何强制清除 Azure CDN 内容或使其失效?
【发布时间】:2012-02-03 23:48:44
【问题描述】:

出于性能原因,我希望通过 Azure CDN 提供很少更改的内容。但是,当内容确实发生变化时,更新后的数据必须立即可用,这一点很重要。理想情况下,我可以设置一个较长的 TTL,然后在我更新内容时主动告诉 CDN 使内容过期。我怎样才能做到这一点?目前没有缓存失效或清除 API,我宁愿不设置短 TTL。

【问题讨论】:

    标签: cdn azure-storage azure-blob-storage microsoft-cdn


    【解决方案1】:

    您可以使用 az cli 清除 cdn 端点

    az cdn endpoint purge 是根命令

    一个例子

    az cdn endpoint purge -g group -n endpoint \
    --profile-name profile-name \
    --content-paths '/scripts/app.js' '/styles/*'
    

    你可以找到更多关于cli命令here的信息

    【讨论】:

      【解决方案2】:

      您还可以通过 PowerShell 清除 CDN 内容:

      $AzureCdnResourceGroupName = "--RESOURCE GROUP--"
      $AzureCdnEndpoint = "--ENDPOINT NAME--"
      $AzureCdnProfileName = "--CDN PROFILE NAME--"
      
      #In case there's multiple subscriptions on the account
      Set-AzureRmContext -SubscriptionId $AzureCdnSubscriptionId
      $AzureCdnSubscriptionId = "--SUBSCRIPTION GUID--"
      
      Write-Host "Purging CDN $AzureCdnProfileName/$AzureCdnEndpoint"
      
      Invoke-AzureRmResourceAction `
          -ResourceGroupName $AzureCdnResourceGroupName `
          -ResourceType 'Microsoft.Cdn/profiles/endpoints' `
          -ResourceName $AzureCdnProfileName/$AzureCdnEndpoint `
          -ApiVersion '2015-06-01' `
          -Action 'Purge' `
          -Parameters @{ ContentPaths = @('/static/js/*','/static/css/*') } `
          -Force
      
      Write-Host 'Purging completed'
      

      【讨论】:

        【解决方案3】:

        2015 年 12 月,Azure 团队增加了通过 REST API (https://msdn.microsoft.com/en-us/library/mt634451.aspx) 刷新或清除 CDN 的功能。 最初,此功能仅适用于使用新 Azure Portal (http://portal.azure.com) 创建的端点,但是使用旧管理界面创建的 CDN 将在 2016 年初迁移 (https://feedback.azure.com/forums/169397-cdn/suggestions/556307-ability-to-force-the-cdn-to-refresh-any-cached-con)。

        【讨论】:

        【解决方案4】:

        没有使 Azure CDN 失效的 API。

        解决方法:

        1. 在 Azure 门户中的 CDN 上启用“查询字符串状态”。然后您可以附加一个新的查询字符串名称和随机值,例如。 /images/background.png?v=1234

        2. 使用时间戳或随机值上传并重命名新文件。例如:/images/background.20140917225200.png

        3. 设置一个较短的缓存头并等待它过期。这是来自 Azure 团队 http://msdn.microsoft.com/en-us/library/azure/gg680306.aspx

        4. 的文章

        【讨论】:

        • 谢谢,这基本上是我采取的路线,我们有一个 DataVersion,只要它发生变化,我们就会增加它,并且客户端进行 Out of Bend REST 调用以查找最新的 DataVersion,然后请求一个包含在 CDN 的文件名中。
        • 我们在 Azure 服务文件发生更改后但在 TTL 到期之前遇到了同样的问题。我们已经切换到 Amazon S3,它允许失效(注意它需要花钱)。此外,在我们的案例中,它更好地服务于亚洲、澳大利亚和南美洲。
        【解决方案5】:

        您不能强制清除 CDN。

        最佳做法是将版本/日期信息附加到您的文件名,并设计您的应用以动态获取当前文件名。

        以产品照片为例,将版本附加到 blob 名称,将 blob 名称存储在表中,然后提供表中名称的链接,而不是对文件名进行硬编码。

        这样,您可以在缓存标头上设置 max-expiry,Azure 会在需要时清理过时的内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-10-11
          • 1970-01-01
          • 2018-09-18
          • 2013-04-26
          • 1970-01-01
          • 2023-03-31
          • 1970-01-01
          相关资源
          最近更新 更多