Eu defino o armazenamento em cache de objetos personalizados na minha distribuição do CloudFront. Por que minha distribuição está usando as configurações de cache da minha origem?

6 minuto de leitura
0

Minha distribuição do Amazon CloudFront tem um comportamento de cache com o armazenamento em cache de objetos definido como Personalizar, mas minha distribuição ainda usa as configurações de cache da minha origem. Como posso corrigir isso?

Descrição resumida

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 esses parâmetros com base no fato da origem retornar um cabeçalho de armazenamento em cache:

  • Se a origem não retornar um cabeçalho de armazenamento em cache, a distribuição 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. O cabeçalho de armazenamento em cache da origem pode ser usado por qualquer cache privado, como um navegador ou proxy.

Se sua distribuição do CloudFront não estiver armazenando em cache com base nos valores personalizados que você definiu nos comportamentos de cache, verifique a origem. Verifique se a origem tem algum cabeçalho de armazenamento em cache conflitante.

Resolução

Para verificar se os cabeçalhos de armazenamento em cache de origem estão em conflito com o armazenamento em cache de objetos personalizados da sua distribuição, siga estas instruções com base nos problemas que estão ocorrendo:

O TTL mínimo e o TTL padrão estão definidos como 0, mas ainda há ocorrências do CloudFront

Se houver ocorrências do CloudFront mesmo quando um URI de solicitação corresponder a um caminho de comportamento de cache com TTL mínimo e TTL padrão definidos como 0, verifique a resposta do CloudFront. Verifique se a resposta mostra o cabeçalho X-Cache como “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 o cabeçalho X-Cache for “Hit from cloudfront” ou “RefreshHit from cloudfront”, a solicitação foi atendida pelo cache do local da borda.

Analise o restante da resposta para os cabeçalhos Cache-Control, Expires e Age. Os cabeçalhos Cache-Control e Expires são cabeçalhos de armazenamento em cache comportamental que informam ao cache intermediário (CloudFront) ou privado (navegador) como armazenar uma solicitação. O cabeçalho Age mostra por quanto tempo uma resposta foi armazenada em cache.

Se o valor máximo do Age do Cache-Control for maior do que o valor do Age, a resposta em cache será considerada nova e será fornecida no local da borda. Se a data do Expires ainda estiver no futuro, a resposta em cache também será considerada nova. Isso ocorre mesmo se o caminho do comportamento do cache tiver TTL mínimo e TTL padrão definidos como 0.

O TTL máximo e o TTL padrão são maiores que 0, mas há falhas no CloudFront

Se houver falhas no CloudFront mesmo quando um URI de solicitação corresponder a um caminho de comportamento de cache com TTL máximo e TTL padrão definidos como valores maiores que 0, verifique a resposta do CloudFront. Verifique se a resposta mostra o cabeçalho X-Cache como “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 cabeçalho X-Cache for “Miss from cloudfront”, a solicitação foi recuperada da origem e não foi atendida pelo cache.

Examine o cabeçalho Cache-Control na resposta. Se o valor do Cache-Control for “no-store”, o cabeçalho estará direcionando o CloudFront para não armazenar a resposta em cache. Se o valor do Cache-Control for “sem cache”, o cabeçalho estará orientando o CloudFront a verificar a origem antes de retornar uma resposta em cache. Essas diretivas substituem as configurações de TTL máximo e TTL padrão do CloudFront.

**Observação:**as respostas que não são do cache não terão um cabeçalho Age.

O CloudFront está armazenando respostas de erro em cache

Por padrão, o CloudFront encaminha as respostas de erro da origem para o cliente. Além disso, o CloudFront 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 5 minutos padrão. O CloudFront não armazena em cache suas próprias respostas de erro, a menos que especificado de outra forma em uma resposta de erro personalizada.

Para determinar se a resposta de erro é da origem ou do CloudFront, verifique o cabeçalho Server. Para determinar se o erro é uma resposta em cache, verifique o cabeçalho Age: uma resposta em cache inclui um cabeçalho Age.

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

Depois de identificar os cabeçalhos de armazenamento em cache conflitantes, atualize a origem

Depois de determinar quais cabeçalhos de armazenamento em cache estão substituindo o armazenamento em cache de objetos personalizados da sua distribuição, siga estas etapas:

  1. Identifique onde na configuração do servidor web os cabeçalhos são aplicados.
  2. Remova as linhas nas quais os cabeçalhos são aplicados.
  3. Reinicie o servidor.
  4. Teste sua origem diretamente para garantir que os cabeçalhos de armazenamento em cache não sejam mais retornados na resposta.
  5. Execute uma invalidação em toda a sua distribuição do CloudFront para aplicar a alteração.

Informações relacionadas

Armazenamento de conteúdo em cache com base em cabeçalhos de solicitação

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos