Cloudfront и CORS: Как мне настроить «Пересылать заголовок источника вместе с любыми другими заголовками, которые требуются вашему источнику»? - PullRequest
0 голосов
/ 24 декабря 2018

Моя ситуация

У меня есть веб-API, размещенный в экземпляре EC2.Я пытаюсь настроить экземпляр облачного фронта "infront" этого экземпляра EC2.

Однако мне не удалось заставить мой облачный фронт перенаправлять запросы в экземпляр EC2.Я получаю сообщение об ошибке, подобное этому:

Access to XMLHttpRequest at 'https://api.example.com' from origin 'https://example.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No access-control-Allow-Origin header is present on the requested resource

Однако, если я изменю свой DNS на точку https://api.example.com на IP-адрес экземпляра EC2, это сработает.

Что я сделал до сих пор

  • Настроен на использование правильного SSL-сертификата (для другой проблемы ранее)
  • Настроил поведение моего дистрибутива CFв заголовки белого списка: «Origin»
  • Настройка поведения моего CF-распределения на «All» - (что отключает кэширование)
  • Недействительный кэш облачного фронта

ЧтоЯ пытаюсь сделать

Я столкнулся с этим документом AWS под названием «Настройка CloudFront для соблюдения настроек CORS».

Ссылка

Однако, он только говорит: « Пользовательские источники - Перешлите заголовок источника вместе с любыми другими заголовками, требуемыми вашим источником. "

Но ... Как мне это сделать? Как переслать заголовок источника вместе с другими необходимыми заголовками?Документы не указывают и не ссылаются на другие документы, чтобы сделать это.

Если на этот вопрос уже был дан ответ, мне очень жаль, я не собираюсь публиковать подобные вопросы или мне лень.Я потратил 4 часа или около того, и это очень расстраивает, потому что развертывание Cloudfront занимает ~ 30 минут ...

Заранее спасибо!

1 Ответ

0 голосов
/ 25 декабря 2018

Мне удалось решить эту проблему, оказалось, что я пропустил еще одну ошибку, возвращенную Cloudfront: 502 Bad Gateway .Несмотря на то, что Chrome покажет вышеупомянутую ошибку «Доступ к XMLHttpRequest ...».Это было вызвано неправильной настройкой DNS и SSL-сертификатов из-за моей неопытности.

Я постараюсь ответить на свой вопрос, поскольку после нескольких часов поиска не было прямого ответа относительно (Cloudfront, EC2 иHTTPS) в Stackoverflow, и есть много оставшихся без ответа вопросов.

Цель, которую пыталась достичь моя группа, - включить подключение HTTPS для всей установки: браузеры пользователей, распределение Cloudfront и мой экземпляр EC2.

Что я сделал, чтобы исправить это:

  • Сгенерировал бесплатный сертификат SSL (например, Let's Encrypt) для использования для экземпляра EC2 с использованием субдомена (например, ec2.example)..com или подстановочный знак * .example.com).* Примечание: ACM не позволяет экспортировать публичные сертификаты SSL, которые могут использоваться в экземплярах EC2, поэтому используйте другие бесплатные онлайн-сервисы SSL.Не используйте самозаверяющие сертификаты.
    • Импортируйте этот сертификат в ACM, чтобы позже использовать его и для Cloudfront.
  • Создана новая запись DNS A для сопоставления субдомена с экземпляром EC2.(например, ec2.example.com до ec2-xx-xxx-xx.ap1-location.amazonaws)
  • Создание нового дистрибутива Cloudfront и установка источника в качестве субдомена ec2.example.com.Кроме того, в разделе «Кэш на основе выбранных заголовков запроса» установите для него значение «Белый список» и переадресацию заголовков «Источник».Для SSL-сертификата в Cloudfront используйте обратно тот, который был сгенерирован на шаге 1)
  • Создан новый DNS-A-запись и сопоставьте поддомен «api» с Cloudfront.(например, api.example.com до abcdxyz.cloudfront.net)
  • Теперь я могу использовать субдомен (api.example.com) для связи с Cloudfront, который по очередивозвращается к моему EC2 и выполняет кэширование, используя HTTPS все время.

Ссылочные ссылки: link1 , link2

Возможно, естьлучший способ установить это, и если так, пожалуйста, поправьте меня, чтобы я тоже мог улучшиться!Надеюсь, этот ответ поможет кому-то новому, как я, и в будущем.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...