Как принудительно удалить содержимое 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.

Временное решение:

  1. Включите "Статус строки запроса" на CDN на портале Azure. Затем вы можете добавить новое имя строки запроса и случайное значение, например. /images/background.png?v=1234

  2. Загрузите и переименуйте новый файл с отметкой времени или случайным значением. например: /images/background.20140917225200.png

  3. Установите более короткий заголовок кэша и дождитесь его истечения. Вот статья из команды 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 будет просто очищать устаревший контент, когда это необходимо.

Другие вопросы по тегам