Cloudfront Несколько источников в одном ведре - PullRequest
2 голосов
/ 07 января 2020

У меня есть дистрибутив облачного фронта, который я использую с одним сегментом S3 в качестве источника. В корзине есть как личные, так и публичные c данные, разделенные по папкам - public_folder_1, public_folder_2, private_folder_1, private_folder_2. Я хочу использовать облачный фронт, чтобы обслуживать только содержимое из двух папок publi c. Я хочу запросы от xxx.cloudfront.net/public_folder_1/file1 до go до public_folder_1 и от xxx.cloudfront.net/public_folder_2/file1 до go до public_folder_2.

Я создал 2 источника в дистрибутиве с именем источника + пути - mybucket/public_folder_1 и mybucket/public_folder_2 для 2 папок. Я также создал два поведения с шаблонами пути - public_folder_1/* и public_folder_2/* (я пытался добавить ведущий / к шаблону пути, похоже, это не имеет значения). Но я не могу получить доступ к файлам через облачный фронт.

Если я изменю шаблон пути для любого поведения на * вместо public_folder_x/*, тогда я смогу получить доступ к файлам, используя xxx.cloudfront.net/filex. Меня беспокоит то, что если у меня есть 2 файла с одинаковыми именами в обеих папках, как Cloudfront узнает, какую папку использовать в качестве источника? Я не хочу создавать отдельный дистрибутив и управлять им для каждого исходного пути.

1 Ответ

0 голосов
/ 16 марта 2020

В моем случае я не понимал, что когда CloudFront находит подходящее поведение, он перенаправляет весь URL-путь к S3 . Если соответствующая структура каталогов не представлена ​​в вашем подкаталоге S3 bucket, вы получите ответ 403. Например, если у вас есть поведение, совпадающее с /developer/*, а URL-адрес равен {hostname}/developer/thing.html, каталог корзины S3, представляющий ваше происхождение , должен иметь подкаталог root -уровня с именем "developer", который содержит thing.html.

Меня беспокоит то, что если у меня есть 2 файла с одинаковыми именами в обеих папках, как Cloudfront узнает, какую папку использовать в качестве источника?

You ' Я должен найти способ отличить guish файлов по подходящей схеме. Я бы предложил добавить папки с уникальными именами к каждому источнику, а затем создать поведение для перенаправления трафика c на основе указанного пути:

  • origin1: mybucket/stuff
  • origin2: mybucket/things
  • поведение1: /stuff/* -> происхождение1
  • поведение2: /things/* -> происхождение2
  • cloudfront-url/stuff/file.html -> возвращает file.html в материале каталог, он же origin1.
  • cloudfront-url/things/file.html -> возвращает file.html в каталоге вещей, он же origin2.

Редактировать:

I только что создал один дистрибутив со следующими двумя источниками ...

origins

со следующим поведением ...

behaviors

И следующая структура ковша ...

S3

И вот результаты:

  • https://d103l0p0xb29zj.cloudfront.net/file.html> соответствует поведению по умолчанию, поэтому возвращает file.html из S3-stackoverflow-test-bucket/public_folder_1.
  • https://d103l0p0xb29zj.cloudfront.net/pub1/file.html> соответствует первому поведению, возвращает file.html из S3-stackoverflow-test-bucket/public_folder_1/pub1
  • https://d103l0p0xb29zj.cloudfront.net/pub2/file.html> соответствует секунде havior, возвращает file.html из S3-stackoverflow-test-bucket/public_folder_2/pub2
  • Обратите внимание, что S3-stackoverflow-test-bucket/public_folder_2/file.html является не доступным вообще на основе текущих правил.

Я буду оставьте дистрибутив на несколько дней, чтобы вы могли переходить по ссылкам.

...