
Я пытаюсь кэшировать веб-сайт, который находится на EC2, у него есть URL uncached.xyz.com
, поэтому я создал Cloud Front с указанием источника uncached.xyz.com
и создал запись, xyz.com
которая указывает на распределение Cloud Front, названное примерно так d111111abcdef8.cloudfront.net
:
Но вся информация, возвращаемая сервером (например, URL-адреса кнопок), не является относительной и включает в себя URL-адрес запроса, что означает, что если Cloudfront обращается к источнику с помощью uncached.xyz.com
, содержимое, возвращаемое CDN (для любого используемого cname), будет содержать URL-адрес источника вместо URL-адреса, используемого для доступа к дистрибутиву CloudFront, что выглядит так, как <a href="uncached.xyz.com/info"><a>
и должно быть <a href="xyz.com/info"><a>
.
кратко: др
CloudFront должен вернуть:
<a href="xyz.com/info"><a>
(это URL-адрес, к которому был получен доступ и который указывает на распределение CDN (кэшированный веб-сайт)).
Но он возвращает:
<a href="uncached.xyz.com/info"><a>
(это URL-адрес источника, который содержит данные для кэширования (веб-сайт)).
Есть ли способ «подделать» сервер Origin, заставив его думать, что URL-адрес, используемый для доступа к нему, принадлежит дистрибутиву CloudFront, а не настроенному URL-адресу источника?
Упрощенная версия того, что использую я.
решение1
Есть несколько способов сделать это:
Установите заголовки X-Forwarded-Host и X-Forwarded-Proto в конфигурации Cloudfront для запросов источника, чтобы передавать требуемую информацию в бэкэнд-приложение. На бэкэнде используйте заголовки, если они есть, для генерации контента на страницах.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto
Другой подход может заключаться в настройке lambda@edge, который обрабатывает исходный ответ и заменяет содержимое при необходимости.