Ich habe benutzerdefiniertes Objekt-Caching für meine CloudFront-Distribution eingerichtet. Warum verwendet meine Distribution die Cache-Einstellungen meines Ursprungs?

Lesedauer: 5 Minute
0

Meine Amazon CloudFront-Distribution verfügt über ein Cache-Verhalten, bei dem Objekt-Caching auf „Benutzerdefiniert“ gesetzt ist, meine Distribution verwendet jedoch weiterhin die Cache-Einstellungen meines Ursprungs. Wie kann ich dieses Problem beheben?

Kurzbeschreibung

Wenn Sie das Objekt-Caching anpassen, konfigurieren Sie die Standard-TTL, die Mindest-TTL und die Maximale TTL. CloudFront verwendet diese Parameter je nachdem, ob der Ursprung einen Caching-Header zurückgibt:

  • Wenn der Ursprung keinen Caching-Header zurückgibt, verwendet die Distribution die Standard-TTL.
  • Wenn der Ursprung einen Caching-Header zurückgibt, der kleiner als die Mindest-TTL ist, verwendet die Distribution die Mindest-TTL.
  • Wenn der Ursprung einen Caching-Header zurückgibt, der größer als die maximale TTL ist, verwendet die Distribution die maximale TTL.

Hinweis: Die Antwort an den Client enthält die Caching-Header des Ursprungs, selbst wenn CloudFront die Antwort auf der Grundlage des Mindest-TTL oder des maximalen TTL zwischenspeichert. Der Caching-Header des Ursprungs kann von jedem privaten Cache verwendet werden, z. B. von einem Browser oder Proxy.

Wenn Ihre CloudFront-Distribution nicht auf der Grundlage der benutzerdefinierten Werte zwischenspeichert, die Sie für das Cache-Verhalten festgelegt haben, überprüfen Sie den Ursprung. Überprüfen Sie, ob im Ursprung widersprüchliche Caching-Header vorliegen.

Lösung

Um zu überprüfen, ob Ursprungs-Caching-Header mit dem benutzerdefinierten Objekt-Caching Ihrer Distribution in Konflikt stehen, folgen Sie diesen Anweisungen den aufgetretenen Problemen entsprechend:

Die Mindest-TTL und die Standard-TTL sind auf 0 gesetzt, es gibt jedoch immer noch Hits von CloudFront

Wenn es Hits von CloudFront gibt, obwohl eine angeforderte URI mit einem Cache-Verhaltenspfad übereinstimmt, bei dem die Mindest-TTL und die Standard-TTL auf 0 gesetzt sind, überprüfen Sie die Antwort von CloudFront. Überprüfen Sie, ob die Antwort den X-Cache-Header als „Hit from cloudfront“ oder „RefreshHit from cloudfront“ anzeigt:

< 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

Wenn der X-Cache-Header „Hit from cloudfront“ oder „RefreshHit from cloudfront“ lautet, wurde die Anfrage aus dem Cache des Edge-Standorts bereitgestellt.

Überprüfen Sie den Rest der Antwort für die Header Cache-Control, Expires und Age. Die Header Cache-Control und Expires sind verhaltensbasierte Caching-Header, die dem Zwischencache (CloudFront) oder dem privaten Cache (Browser) mitteilen, wie eine Anfrage gespeichert werden soll. Der Age-Header zeigt, wie lange eine Antwort zwischengespeichert wurde.

Wenn der Wert für das maximale Alter für Cache-Control größer als der Wert für Age ist, wird die zwischengespeicherte Antwort als neu betrachtet und vom Edge-Standort aus bereitgestellt. Wenn das Ablaufdatum noch in der Zukunft liegt, wird die zwischengespeicherte Antwort ebenfalls als erneut berücksichtigt. Dies gilt auch dann, wenn die Minimum-TTL und Standard-TTL für den Cache-Verhaltenspfad auf 0 gesetzt sind.

Die maximale TTL und die Standard-TTL sind größer als 0, CloudFront weist jedoch Misses auf

Wenn CloudFront Misses aufweist, obwohl ein Anforderungs-URI einem Cache-Verhaltenspfad entspricht, bei dem die maximale TTL und die Standard-TTL auf Werte größer als 0 gesetzt sind, überprüfen Sie die Antwort von CloudFront. Überprüfen Sie, ob in der Antwort der X-Cache-Header als „Miss from cloudfront“ angezeigt wird:

< 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

Wenn der X-Cache-Header „Miss from cloudfront“ lautet, wurde die Anfrage vom Ursprung abgerufen und nicht vom Cache bedient.

Überprüfen Sie den Cache-Control-Header in der Antwort. Wenn der Wert für Cache-Control „no-store“ ist, weist der Header CloudFront an, die Antwort nicht zwischenzuspeichern. Wenn der Wert für Cache-Control „no-cache“ ist, weist der Header CloudFront an, eine Verifizierung mit dem Ursprung durchzuführen, bevor eine zwischengespeicherte Antwort zurückgegeben wird. Diese Direktiven ersetzen die CloudFront-Einstellungen Maximaler TTL und Standard-TTL.

Hinweis: Antworten, die nicht aus dem Cache stammen, haben keinen Age-Header.

CloudFront speichert Fehlerantworten im Cache

Standardmäßig leitet CloudFront Fehlerantworten vom Ursprung an den Client weiter. Darüber hinaus speichert CloudFront die Fehlerantwort des Ursprungs standardmäßig 10 Sekunden lang im Cache.

Wenn die Fehlerantwort vom Ursprung einen Cache-Control-Header enthält, speichert CloudFront den Fehler mit der entsprechenden TTL statt der standardmäßigen 5 Minuten. CloudFront speichert seine eigenen Fehlerantworten nicht, sofern in einer benutzerdefinierten Fehlerantwort nichts gegensätzliches festgelegt ist.

Um festzustellen, ob die Fehlerantwort vom Ursprung oder von CloudFront stammt, überprüfen Sie den Server-Header. Um festzustellen, ob es sich bei dem Fehler um eine zwischengespeicherte Antwort handelt, überprüfen Sie den Age-Header – eine zwischengespeicherte Antwort enthält einen Age-Header.

Das folgende Beispiel ist ein Fehler von einem Amazon Simple Storage Service (Amazon S3)-Ursprung, bei dem es sich um eine zwischengespeicherte Antwort handelt:

< 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

Das folgende Beispiel ist ein Fehler von CloudFront, der keine zwischengespeicherte Antwort ist:

< 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

Nachdem Sie die widersprüchlichen Caching-Header identifiziert haben, aktualisieren Sie den Ursprung

Nachdem Sie festgestellt haben, welche Caching-Header das benutzerdefinierte Objekt-Caching Ihrer Distribution ersetzen, gehen Sie wie folgt vor:

  1. Identifizieren Sie, wo in der Webserverkonfiguration die Header angewendet werden.
  2. Entfernen Sie die Zeilen, in denen die Header angewendet werden.
  3. Starten Sie den Server neu.
  4. Testen Sie Ihren Ursprung direkt, um sicherzustellen, dass die Caching-Header nicht mehr in der Antwort zurückgegeben werden.
  5. Führen Sie eine Invalidierung für Ihre gesamte CloudFront-Distribution durch, um die Änderung zu übernehmen.

Ähnliche Informationen

Zwischenspeichern von Inhalten auf der Grundlage von Anforderungsheadern

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren