Quero solucionar o motivo pelo qual minha distribuição do Amazon CloudFront usa as configurações de cache da minha origem quando eu configuro o armazenamento em cache de objetos personalizados.
Breve descrição
Ao personalizar o armazenamento em cache de objetos, configure o TTL padrão, o TTL mínimo e o TTL máximo.
O CloudFront usa o seguinte comportamento:
- Se a origem não retornar um cabeçalho de armazenamento em cache, a distribuição CloudFront usará o TTL padrão.
- Se a origem retornar um cabeçalho de armazenamento em cache menor que o TTL mínimo, a distribuição usará o TTL mínimo.
- Se a origem retornar um cabeçalho de armazenamento em cache maior que o TTL máximo, a distribuição usará o TTL máximo.
Observação: a resposta ao cliente contém os cabeçalhos de armazenamento em cache da origem, mesmo quando o CloudFront armazena a resposta em cache com base no TTL mínimo ou no TTL máximo. Todos os caches privados, como um navegador ou proxy, podem usar o cabeçalho de cache da origem.
Se sua distribuição não armazenar em cache com base no valor TTL padrão, verifique se os cabeçalhos de cache da origem não estão em conflito.
Resolução
Identifique os cabeçalhos de cache que estão em conflito
Verifique se os cabeçalhos de cache da origem estão em conflito com o cache de objetos personalizados da sua distribuição.
O TTL mínimo e o TTL padrão estão definidos como 0, mas ainda há resultados em cache do CloudFront
Verifique a resposta do CloudFront para verificar se o valor do X-Cache é Hit from cloudfront ou RefreshHit from cloudfront:
< HTTP/1.1 200 OK
< Content-Type: text/html
< Content-Length: 437
< Connection: keep-alive
< Date: Sat, 03 Feb 2018 19:26:45 GMT
< Last-Modified: Sat, 03 Feb 2018 19:25:24 GMT
< ETag: "example12345abcdefghijklmno54321"
< Cache-Control: max-age=300, Public
< Accept-Ranges: bytes
< Server: AmazonS3
< Age: 14
< X-Cache: Hit from cloudfront
Se X-Cache é Hit from cloudfront ou RefreshHit from cloudfront, a solicitação veio do cache do local da borda. Em um hit de atualização, o CloudFront revalida com a origem que o objeto expirado não foi modificado e, em seguida, atualiza quando o objeto está obsoleto.
Verifique os valores de Cache-Controle, Expira e Idade na resposta. Se o valor máximo da idade do Cache-Control for maior do que o valor da Idade, a resposta em cache virá do cache do CloudFront. Se a data Expira ainda estiver no futuro, a resposta em cache também não é obsoleta. Esse é o comportamento esperado, mesmo que o caminho do comportamento do cache tenha TTL mínimo e TTL padrão definidos como 0.
Observação: no exemplo anterior, o TTL máximo é maior que 0. Quando todos os valores de TTL estão definidos como 0, o armazenamento em cache é desativado.
O TTL máximo e o TTL padrão são maiores que 0, mas há falhas no CloudFront
Verifique a resposta do CloudFront para ver se o valor do X-Cache é Miss from cloudfront:
< HTTP/1.1 200 OK
< Content-Type: text/html
< Content-Length: 437
< Connection: keep-alive
< Date: Sat, 03 Feb 2018 19:26:45 GMT
< Last-Modified: Sat, 03 Feb 2018 19:25:24 GMT
< ETag: "example12345abcdefghijklmno54321"
< Cache-Control: no-cache, no-store
< Accept-Ranges: bytes
< Server: AmazonS3
< X-Cache: Miss from cloudfront
Se o X-Cache for Miss from cloudfront, a solicitação veio da origem e não do cache.
Se o valor do Cache-Control for no-store, o cabeçalho direcionará o CloudFront a não armazenar em cache a resposta. Se o Cache-Control estiver no-cache, o cabeçalho direcionará o CloudFront a verificar com a origem antes de retornar uma resposta em cache. Se o Cache-Control for privado, o CloudFront só deverá armazenar a resposta em caches privados, como o cache local de um navegador.
Esses comportamentos substituem as configurações de TTL máximo e TTL padrão.
Observação: as respostas que não são do cache não terão um cabeçalho Idade.
Nos exemplos anteriores, o TTL mínimo é definido como 0. Se o TTL mínimo for maior que 0, o CloudFront armazenará o objeto em cache, mesmo que a resposta tenha diretivas no-cache, no-store ou privadas. Para obter mais informações, consulte Especificar por quanto tempo o CloudFront armazena os objetos em cache.
O CloudFront armazena respostas de erro em cache
O CloudFront encaminha as respostas de erro da origem para o cliente e armazena em cache a resposta de erro da origem por 10 segundos, por padrão.
Se a resposta de erro da origem contiver um cabeçalho Cache-Control, o CloudFront armazenará o erro em cache com o TTL relevante em vez dos 10 segundos padrão.
Para verificar se a resposta de erro é da origem ou do CloudFront, veja o valor do Servidor. Para verificar se o erro é uma resposta em cache, veja se a resposta inclui o cabeçalho Idade.
O exemplo a seguir é um erro de uma origem do Amazon Simple Storage Service (Amazon S3) que é uma resposta em cache:
< HTTP/1.1 403 Forbidden
< Content-Type: application/xml
< Transfer-Encoding: chunked
< Connection: keep-alive
< Date: Sat, 03 Feb 2018 21:07:51 GMT
< Server: AmazonS3
< Age: 12
< X-Cache: Error from cloudfront
O exemplo a seguir é um erro do CloudFront que não é uma resposta em cache:
< HTTP/1.1 403 Forbidden
< Server: CloudFront
< Date: Sat, 03 Feb 2018 21:14:53 GMT
< Content-Type: text/xml
< Content-Length: 146
< Connection: keep-alive
< X-Cache: Error from cloudfront
Atualize a origem
Depois de identificar os cabeçalhos de cache que substituem o cache de objetos personalizados da sua distribuição, atualize a origem.
Conclua as etapas a seguir:
- Identifique onde, na configuração do servidor web, os cabeçalhos estão.
- Remova as linhas nas quais os cabeçalhos são aplicados.
- Reinicie o servidor.
- Teste sua origem para verificar se os cabeçalhos de cache não retornam mais na resposta.
- Execute uma invalidação em toda a sua distribuição do CloudFront para aplicar a alteração.
Informações relacionadas
Conteúdo em cache com base nos cabeçalhos de solicitação
Gerenciar o tempo de permanência do conteúdo no cache (expiração)