
Estou tentando armazenar em cache um site que está em um EC2, ele tem uma URL uncached.xyz.com
, então criei um Cloud Front com a origem apontada uncached.xyz.com
e criei um registro xyz.com
que aponta para a distribuição do cloudfront, chamado algo como d111111abcdef8.cloudfront.net
,
Mas todas as informações retornadas pelo servidor (como URLs de botão) não são relativas e incluem a URL de solicitação, o que significa que se o Cloudfront acessar a origem com uncached.xyz.com
, o conteúdo retornado pelo CDN (para qualquer cname usado) conterá a URL de origem em vez do url usado para acessar a distribuição do CloudFront, parecendo <a href="uncached.xyz.com/info"><a>
onde deveria estar <a href="xyz.com/info"><a>
.
tl: dr.
O CloudFront deve retornar:
<a href="xyz.com/info"><a>
(que é a URL acessada que aponta para a distribuição CDN (o site em cache))
Mas retorna:
<a href="uncached.xyz.com/info"><a>
(que é a URL de origem que contém os dados a serem armazenados em cache (o site))
Existe uma maneira de "falsificar" o servidor Origin fazendo-o pensar que o URL usado para acessá-lo é a distribuição do CloudFront em vez do URL de origem configurado?
Versão mais simples do que estou usando.
Responder1
Existem várias maneiras de fazer isso:
Defina os cabeçalhos X-Forwarded-Host e X-Forwarded-Proto na configuração do Cloudfront para solicitações de origem para passar as informações necessárias para o aplicativo de back-end. No backend utilize os Headers, se presentes, para gerar o conteúdo das páginas.
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
Outra abordagem poderia ser configurar um lambda@edge que processe a resposta de origem e substitua o conteúdo quando necessário.