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

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

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

Все это совершенно то, что я хочу, ОДНАКО …..

  • Если пользователь перейдет к любой кнопке на странице, URL-адрес в браузере изменится на elb.example.com (он должен оставаться example.com).
  • Если я захожу, чтобы просмотреть исходный код страницы, все ссылки на любую кнопку на странице имеют базовый URL-адрес elb.example.com (это должен быть example.com)

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

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

3

Решение

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

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

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

Вы найдете заголовок узла в настройках поведения кэша -> кэш на основе выбранных заголовков запроса -> белый список.

10

Другие решения

Других решений пока нет …