Ho impostato la memorizzazione personalizzata nella cache degli oggetti sulla mia distribuzione CloudFront. Perché la mia distribuzione utilizza le impostazioni della cache della mia origine?

6 minuti di lettura
0

La mia distribuzione Amazon CloudFront ha un comportamento della cache con la memorizzazione nella cache degli oggetti impostata su Personalizza, ma la mia distribuzione utilizza ancora le impostazioni della cache di origine. Come posso risolvere questo problema?

Breve descrizione

Quando si personalizza la memorizzazione nella cache degli oggetti, si configurano il TTL predefinito, il TTL minimo e il TTL massimo. CloudFront utilizza questi parametri a seconda che l'origine restituisca un'intestazione di memorizzazione nella cache:

  • Se l'origine non restituisce un'intestazione di memorizzazione nella cache, la distribuzione utilizza il TTL predefinito.
  • Se l'origine restituisce un'intestazione di memorizzazione nella cache inferiore al TTL minimo, la distribuzione utilizza il TTL minimo.
  • Se l'origine restituisce un'intestazione di memorizzazione nella cache maggiore del TTL massimo, la distribuzione utilizza il TTL massimo.

Nota: la risposta al client contiene le intestazioni di cache dell'origine anche quando CloudFront memorizza nella cache la risposta in base al TTL minimo o al TTL massimo. L'intestazione di cache dell'origine può essere utilizzata da qualsiasi cache privata, come un browser o un proxy.

Se la tua distribuzione CloudFront non esegue la memorizzazione nella cache in base ai valori personalizzati che hai impostato sui comportamenti della cache, controlla l'origine. Verifica se l'origine presenta intestazioni di memorizzazione nella cache in conflitto.

Risoluzione

Per verificare se le intestazioni di memorizzazione nella cache di origine sono in conflitto con la memorizzazione nella cache degli oggetti personalizzata della tua distribuzione, segui queste istruzioni in base ai problemi che riscontri:

Il TTL minimo e il TTL predefinito sono impostati su 0, ma ci sono ancora riscontri da CloudFront.

Se vengono rilevati accessi da CloudFront anche quando l'URI di una richiesta corrisponde a un percorso di comportamento della cache con TTL minimo e TTL predefinito impostati su 0, controlla la risposta di CloudFront. Verifica se la risposta mostra l'intestazione X-Cache come "Hit from cloudfront" o "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 l'intestazione X-Cache è "Hit from cloudfront" o "RefreshHit from cloudfront", la richiesta è stata inviata dalla cache della posizione edge.

Esamina il resto della risposta per le intestazioni Cache-Control, Expires e Age. Le intestazioni Cache-Control e Expires sono intestazioni di caching comportamentale che indicano alla cache intermediaria (CloudFront) o privata (browser) come archiviare una richiesta. L'intestazione Age mostra per quanto tempo una risposta è stata memorizzata nella cache.

Se il valore di età massima per Cache-Control è maggiore del valore di Age, la risposta memorizzata nella cache viene considerata nuova e viene fornita dalla posizione periferica. Se la data di scadenza è ancora futura, anche la risposta memorizzata nella cache viene considerata nuova. Ciò si verifica anche se il percorso di comportamento della cache ha TTL minimo e TTL predefinito impostati su 0.

Il TTL massimo e il TTL predefinito sono maggiori di 0, ma CloudFront presenta alcuni errori

Se si verificano errori da CloudFront anche quando l'URI di una richiesta corrisponde a un percorso di comportamento della cache con TTL massimo e TTL predefinito impostati su valori maggiori di 0, controlla la risposta di CloudFront. Verifica se la risposta mostra l'intestazione X-Cache come "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 l'intestazione X-Cache è "Miss from cloudfront", la richiesta è stata recuperata dall'origine e non è stata servita dalla cache.

Rivedi l'intestazione Cache-Control nella risposta. Se il valore per Cache-Control è "no-store", l'intestazione indica a CloudFront di non memorizzare la risposta nella cache. Se il valore di Cache-Control è "no-cache", l'intestazione indica a CloudFront di verificare con l'origine prima di restituire una risposta memorizzata nella cache. Queste direttive sostituiscono le impostazioni TTL massimo e TTL predefinito di CloudFront.

Nota: le risposte che non provengono dalla cache non avranno l'intestazione Age.

CloudFront sta memorizzando nella cache le risposte agli errori

Per impostazione predefinita, CloudFront inoltra le risposte agli errori dall'origine al client. Inoltre, CloudFront memorizza nella cache la risposta all'errore dell'origine per 10 secondi per impostazione predefinita.

Se la risposta all'errore dell'origine contiene un'intestazione Cache-Control, CloudFront memorizza l'errore nella cache con il TTL pertinente anziché i 5 minuti predefiniti. CloudFront non memorizza nella cache le proprie risposte di errore, a meno che non sia specificato diversamente in una risposta di errore personalizzata.

Per determinare se la risposta all'errore proviene dall'origine o da CloudFront, controlla l'intestazione del server. Per determinare se l'errore è una risposta memorizzata nella cache, controlla l'intestazione Age: una risposta memorizzata nella cache include un'intestazione Age.

L'esempio seguente è un errore proveniente da un'origine di Amazon Simple Storage Service (Amazon S3) che è una risposta memorizzata nella 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

L'esempio seguente è un errore di CloudFront che non è una risposta memorizzata nella 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

Dopo aver identificato le intestazioni della cache in conflitto, aggiorna l'origine.

Dopo aver determinato quali intestazioni di caching stanno sostituendo la memorizzazione nella cache degli oggetti personalizzata della distribuzione, segui questi passaggi:

  1. Identifica dove nella configurazione del server Web vengono applicate le intestazioni.
  2. Rimuovi le righe in cui sono applicate le intestazioni.
  3. Riavvia il server.
  4. Verifica direttamente la tua origine per assicurarti che le intestazioni della cache non vengano più restituite nella risposta.
  5. Esegui un annullamento dell'intera distribuzione CloudFront per applicare la modifica.

Informazioni correlate

Memorizzazione nella cache dei contenuti in base alle intestazioni delle richieste

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa