Добавление CloudFront для S3, но EC2 не работает - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь настроить CloudFront со статическим веб-сайтом Amazon S3 и сервером Amazon EC2 nodejs.

Я выполнил следующие действия:

  1. Настройка S3 ковша example.com
  2. Создать сертификат в ACM, выданном на example.com и api.example.com
  3. Создание дистрибутива CloudFront
  4. Установить созданные альтернативные доменные имена CloudFront: example.com и api.example.com
  5. Добавлен сертификат SSL от ACM
  6. Создан источник с example.com.s3-website-AWS_REGION.amazonaws.com
  7. На маршруте 53 добавлена ​​запись для example.com и api.example.com с псевдонимом, указывающим на распределение CloudFront.

После этого мой https://example.com правильно загружает веб-страницу. Теперь я пытаюсь установить CloudFront для моего сервера nodejs.

  1. Добавлен новый источник в дистрибутиве CloudFront с ec2-IP.AWS_REGION.compute.amazonaws.com.

  2. Добавлено поведение для шаблона api.tutorezie.com/* со всеми TTL, установленными на ноль.

Теперь, когда я пытаюсь получить доступ к серверу nodejs с помощью https://api.example.com, я не могу это сделать и получаю ошибку. Я не уверен, что я делаю неправильно.

1 Ответ

1 голос
/ 09 июня 2019

Вас смущает, что CloudFront обслуживается на основе виртуального хостинга, CloudFront не делает этого, вместо этого он просматривает путь URI, например: / api / * и т. Д., И перенаправляет запросы к источнику на основе соответствия поведения пути.

В https://api.example.com и https://example.com, он соответствует поведению пути по умолчанию и отправке запросов на S3.

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

  1. Создайте новый CloudFront и добавьте api.example.com здесь, в CNAME, и используйте существующий сертификат и источник в качестве экземпляра EC2, Cloudfront невзимать плату за создание дистрибутива.

  2. Если выше нет, вам нужно использовать Lambda @ edge (запрос средства просмотра / запрос источника (заголовок HOST белого списка)), чтобы прочитать заголовок HOST и выбрать источникec2 или S3, если это api.example.com или example.com.

https://aws.amazon.com/blogs/networking-and-content-delivery/dynamically-route-viewer-requests-to-any-origin-using-lambdaedge/

Исходя из ваших требований, вариант 1 должен быть легким для вас.

...