Saltar al contenido

¿Por qué mi distribución de CloudFront usa la configuración de caché de mi origen cuando configuro el almacenamiento en caché de objetos personalizado?

6 minutos de lectura
0

Quiero solucionar los motivos por los que mi distribución de Amazon CloudFront utiliza la configuración de caché de mi origen al configurar el almacenamiento en caché de objetos personalizado.

Descripción breve

Al personalizar el almacenamiento en caché de objetos, debes configurar el tiempo de vida predeterminado (TTL predeterminado), el TTL mínimo y el TTL máximo.

CloudFront utiliza el siguiente comportamiento:

  • Si el origen no devuelve un encabezado de almacenamiento en caché, la distribución de CloudFront utiliza el TTL predeterminado.
  • Si el origen devuelve un encabezado de almacenamiento en caché inferior al TTL mínimo, la distribución utiliza el TTL mínimo.
  • Si el origen devuelve un encabezado de almacenamiento en caché superior al TTL máximo, la distribución utiliza el TTL máximo.

Nota: La respuesta al cliente contiene los encabezados de almacenamiento en caché del origen, incluso si CloudFront almacena en caché la respuesta basándose en el TTL mínimo o el TTL máximo. Todas las cachés privadas, como las de un navegador o un proxy, pueden usar el encabezado de almacenamiento en caché del origen.

Si tu distribución no almacena en caché en función del valor de TTL predeterminado, comprueba que los encabezados de almacenamiento en caché del origen no entren en conflicto.

Resolución

Identificación de los encabezados de almacenamiento en caché que entran en conflicto

Comprueba si los encabezados de almacenamiento en caché del origen entran en conflicto con el almacenamiento en caché de objetos personalizado de tu distribución.

El TTL mínimo y el TTL predeterminado están configurados en 0, pero aún hay resultados de CloudFront almacenados en caché

Comprueba la respuesta de CloudFront para comprobar si el valor de X-Cache es Hit from cloudfront (Resultado de CloudFront) o RefreshHit from cloudfront (RefreshHit de 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

Si X-Cache es Hit from cloudfront (Resultado de CloudFront) o RefreshHit from cloudfront (RefreshHit de CloudFront), la solicitud se ha atendido desde la caché de la ubicación periférica. En una actualización, CloudFront revalida con el origen que el objeto caducado no se haya modificado y, a continuación, se actualiza cuando el objeto queda obsoleto.

Comprueba los valores de Cache-Control, Expires (Caducidad) y Age (Antigüedad) en la respuesta. Si el valor de max-age de Cache-Control es mayor que el valor de Age (Antigüedad), la respuesta almacenada en caché proviene de la caché de CloudFront. Si la fecha de Expires (Caducidad) aún es futura, la respuesta almacenada en caché también se considera nueva. Este es el comportamiento esperado, incluso si la ruta de comportamiento de la caché tiene el TTL mínimo y el TTL predeterminado establecidos en 0.

Nota: En el ejemplo anterior, el TTL máximo es mayor que 0. Cuando todos los valores de TTL se establecen en 0, el almacenamiento en caché está desactivado.

El TTL máximo y el TTL predeterminado son superiores a 0, pero hay ausencias en CloudFront

Comprueba la respuesta de CloudFront para comprobar si el valor de X-Cache es Miss from cloudfront (Fallo de 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

Si X-Cache es Miss from cloudfront (Fallo de CloudFront), entonces la solicitud proviene del origen y no de la caché.

Si Cache-Control es no-store, el encabezado indica a CloudFront que no almacene la respuesta en caché. Si Cache-Control es no-cache, el encabezado indica a CloudFront que verifique el origen antes de devolver una respuesta en caché. Si Cache-Control es private, CloudFront solo debe almacenar la respuesta en cachés privadas, como la caché local de un navegador.

Estos comportamientos anulan las configuraciones del TTL máximo y el TTL predeterminado.

Nota: Las respuestas que no provengan de la caché no tendrán un encabezado Age (Antigüedad).

En los ejemplos anteriores, el TTL mínimo está establecido en 0. Si el TTL mínimo es superior a 0, CloudFront almacena el objeto en caché, incluso si la respuesta tiene las directivas no-cache, no-store o private. Para obtener más información, consulta Especificación de cuánto tiempo CloudFront almacena objetos en caché.

CloudFront almacena en caché las respuestas de error

CloudFront reenvía las respuestas de error del origen al cliente y almacena en caché la respuesta de error del origen durante 10 segundos de forma predeterminada.

Si la respuesta de error del origen contiene un encabezado Cache-Control, CloudFront almacena el error en caché con el TTL correspondiente en lugar de los 10 segundos predeterminados.

Para comprobar si la respuesta de error proviene del origen o de CloudFront, consulta el valor de Server (Servidor). Para comprobar si el error es una respuesta guardada en caché, comprueba si la respuesta incluye el encabezado Age (Antigüedad).

El siguiente ejemplo es un error de un origen de Amazon Simple Storage Service (Amazon S3) que es una respuesta en caché:

< 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

El siguiente ejemplo es un error de CloudFront que no es una respuesta almacenada en caché:

< 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

Actualización del origen

Después de identificar los encabezados de almacenamiento en caché que anulan el almacenamiento en caché de objetos personalizado de tu distribución, actualiza el origen.

Sigue estos pasos:

  1. Identifica dónde están los encabezados en la configuración del servidor web.
  2. Elimina las líneas en las que se aplican los encabezados.
  3. Reinicia el servidor.
  4. Prueba tu origen para comprobar que los encabezados de almacenamiento en caché ya no aparecen en la respuesta.
  5. Ejecuta una invalidación en toda tu distribución de CloudFront para aplicar el cambio.

Información relacionada

Almacenamiento en caché de contenido en función de encabezados de solicitud

Administración de cuánto tiempo se mantiene el contenido en una caché (vencimiento)

OFICIAL DE AWSActualizada hace 7 meses