出于性能原因,我希望通过 Azure CDN 提供很少更改的内容。但是,当内容确实发生变化时,更新后的数据必须立即可用,这一点很重要。理想情况下,我可以设置一个较长的 TTL,然后在我更新内容时主动告诉 CDN 使内容过期。我怎样才能做到这一点?目前没有缓存失效或清除 API,我宁愿不设置短 TTL。
5 回答
2015 年 12 月,Azure 团队增加了通过 REST API ( https://msdn.microsoft.com/en-us/library/mt634451.aspx ) 刷新或清除 CDN 的功能。一开始,此功能仅适用于使用新 Azure 门户 ( 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)。
没有使 Azure CDN 失效的 API。
解决方法:
在 Azure 门户中的 CDN 上启用“查询字符串状态”。然后您可以附加一个新的查询字符串名称和随机值,例如。/images/background.png?v=1234
使用时间戳或随机值上传并重命名新文件。例如:/images/background.20140917225200.png
设置一个较短的缓存头并等待它过期。这是 Azure 团队的一篇文章http://msdn.microsoft.com/en-us/library/azure/gg680306.aspx
您还可以通过 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'
您可以使用 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 命令的更多信息
您不能强制清除 CDN。
最佳做法是将版本/日期信息附加到您的文件名,并设计您的应用程序以动态获取当前文件名。
以产品照片为例,将版本附加到 blob 名称,将 blob 名称存储在表中,然后从表中提供指向名称的链接,而不是对文件名进行硬编码。
这样,您可以在缓存标头上设置 max-expiry,Azure 只会在需要时清理过时的内容。