2016-06-25 5 views
0

Я пытаюсь выяснить правильный путь для объекта, чтобы сделать недействительным распределение CloudFront.Правильный путь недействительности для объекта CloudFront

CloudFront настроен с альтернативным именем домена *.example.com

Хитрость в том, что я установки пользовательских координат на EC2, который использует HAProxy сделать некоторый путь переписывания.

Так что просьба к

mysubdomain.example.com/icon.png

переписывается

s3.amazonaws.com/examplebucket/somedirectory/mysubdomain/icon.png

и результат затем возвращается в CloudFront. (Итак, как путь, так и хост переписываются)

Теперь у меня возникли проблемы с поиском правильного пути для этого объекта при отправке запроса о недействительности. (Я не хочу использовать управление версиями, потому что мне нужно, чтобы имя файла оставалось прежним)

Я пробовал следующую конфигурацию, но, похоже, она не работает. Недействительность создается и обрабатывается, но без эффекта.

const invalidationParams = { 
    DistributionId: 'MY_DISTRIBUTION_ID', 
    InvalidationBatch: { 
    CallerReference: 'SOME_RANDOM_STRING', 
    Paths: { 
     Quantity: 1, 
     Items: [ 
     '/somedirectory/mysubdomain/icon.png' 
     ] 
    } 
    } 
} 

Поскольку указана только PATH, которая является по отношению к распределению, и никоим образом указать полный URL в конфигурации недействительности, он делает это невозможным аннулирует объект в этой конфигурации?

+0

Просто используйте этот путь "/ somedirectory/mysubdomain /" он будет работать – error2007s

ответ

1

Недостатки CloudFront считают каждый объект, соответствующий спецификации пути, по просьбе браузера. Чтобы аннулировать http://example.com/cat.jpg указать одно из следующих действий:

cat.jpg 
/cat.jpg 

Ведущий слэш не является обязательным, но подразумевается, если отсутствует.

Пути - это единственные значения, принятые для запросов на недействительность.

Для каждого местоположения края каждая копия объекта, соответствующего этому пути - независимо от альтернативного имени домена или других атрибутов, связанных с ним, будет выселена.

Обратите внимание, что «каждая копия объекта, соответствующая этому пути» может сбивать с толку некоторые из них, поскольку предположение может заключаться в том, что только один экземпляр будет соответствовать заданному пути, но это неверно. CloudFront кэширует разные копии «одного» объекта, в зависимости от того, какие параметры запроса пересылаются в начало. Если строка запроса, cookie, белые заголовки и т. Д. Переадресованы, то многие копии «того же» объекта будут кэшироваться, потому что кеширование требует, чтобы кеш предполагал, что ответ будет изменяться, если таковой будет, если параметры пересылаемого запроса будут разными. Вот почему так мало переадресовано по умолчанию - оно помогает вашей скорости, потому что это уменьшает вероятность того, что любой заданный запрос будет казаться «уникальным» для логики кэша.

+0

Спасибо за подробный ответ, но он все еще не работает. Я пробовал путь '/mysubdomain/icon.png', но после завершения аннулирования старый файл по-прежнему загружается в браузере (я очистил кеш браузера). – levon

+0

Я попытался сделать эту часть понятной, используя фразу * спецификацию пути, по просьбе браузера *.Используйте путь запроса к интерфейсу, а не к переписанному (добавочному) контуру. Просто укажите '/ icon.png', если браузер получает объект, используя' GET /icon.png HTTP/1.1'. –

+0

Но в этом случае это недействило бы все файлы 'icon.png' в дистрибутиве, а не тот, который мне нужен, не так ли? Таким образом, нет способа аннулировать только тот, который мне нужен, если он находится под «back-end» путем? – levon