Назад | Перейти на главную страницу

AWS Cloudfront + Load Balancer, URL-адрес изменяется с основного домена на поддомен балансировщика нагрузки

Моя установка выглядит следующим образом:

  1. пользователь вводит example.com в браузере
  2. запрос отправляется в AWS CloudFront, который перенаправляет HTTP на HTTPS и перенаправляет запрос в AWS Elastic LoadBalancer (elb.example.com)
  3. LoadBalancer перенаправляет запрос экземпляру EC2, на котором запущена среда PHP Laravel.
  4. EC2 нормально реагирует
  5. пользователь правильно просматривает страницу на example.com, все остальное прозрачно для него

Все это идеально то, что я хочу, ОДНАКО ...

Причина в том, что EC2 видит запрос, исходящий от балансировщика нагрузки, поэтому он предполагает, что базовый URL - это elb.example.com, и соответственно генерирует все ссылки.

Как заставить EC2 видеть базовый URL как example.com?

Такое поведение, вероятно, связано с тем, что по умолчанию CloudFront устанавливает заголовок запроса Host: HTTP равным имени хоста источника, в данном случае elb.example.com. Затем приложение предположительно генерирует ссылки на основе этого имени хоста.

Если вместо этого вы настроите CloudFront для внесения этого заголовка в белый список для пересылки в источник, заголовок хоста, отправленный браузером (example.com), будет отправлен в приложение CloudFront, поэтому приложение должно вести себя так, как вы ожидаете. и используйте это значение при создании ссылок. При этом CloudFront по-прежнему использует имя хоста исходного сервера для поиска DNS, необходимого для установления TCP-соединения с источником (в данном случае ELB), но прекращает вводить это имя хоста в заголовки HTTP-запроса.

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesForwardHeaders

На это ответил @ michael-sqlbot на SO