Как принудительно удалить содержимое Azure CDN или сделать его недействительным?
У меня есть содержимое, которое редко меняется и которое я хочу показывать в Azure CDN по соображениям производительности. Однако, когда содержимое действительно изменяется, важно, чтобы обновленные данные были немедленно доступны. В идеале, я мог бы установить длинный TTL, но затем заранее сказать CDN об истечении срока действия контента, когда я обновлю его. Как я могу сделать это? В настоящее время нет никакого аннулирования кэша или очистки API, и я бы не стал устанавливать короткий TTL.
4 ответа
В декабре 2015 года группа Azure добавила возможность обновлять или очищать CDN через REST API ( https://msdn.microsoft.com/en-us/library/mt634451.aspx). Вначале эта функция доступна только для конечных точек, созданных с помощью нового портала 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).
Нет API для аннулирования CDN Azure.
Временное решение:
Включите "Статус строки запроса" на CDN на портале Azure. Затем вы можете добавить новое имя строки запроса и случайное значение, например. /images/background.png?v=1234
Загрузите и переименуйте новый файл с отметкой времени или случайным значением. например: /images/background.20140917225200.png
Установите более короткий заголовок кэша и дождитесь его истечения. Вот статья из команды Azure http://msdn.microsoft.com/en-us/library/azure/gg680306.aspx
Вы можете использовать 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 через PowerShell:
$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'
Вы не можете принудительно очистить CDN.
Рекомендуется добавлять информацию о версии / дате к имени файла и разрабатывать приложение для динамического получения текущего имени файла.
Для фотографий продукта в качестве примера добавьте версию к имени большого двоичного объекта, сохраните имя большого двоичного объекта в таблице и затем предоставьте ссылку на имя из таблицы вместо жесткого кодирования имени файла.
Таким образом, вы можете установить максимальное истечение срока действия для заголовков кэша, и Azure будет просто очищать устаревший контент, когда это необходимо.