Utiliser la mise en cache négative

Cette page explique l'utilisation de la mise en cache négative avec Cloud CDN. La mise en cache négative permet de définir une valeur TTL différente pour chaque code d'état,

afin d'appliquer un contrôle précis sur la mise en cache des erreurs ou des redirections courantes. Ce processus peut réduire la charge pesant sur vos origines et améliorer l'expérience de l'utilisateur final en réduisant la latence des réponses.

Avant de commencer

  • En savoir plus sur les modes de cache et le contenu statique

  • Assurez-vous que Cloud CDN est activé. Pour obtenir des instructions, consultez la page Utiliser Cloud CDN.

  • Si nécessaire, installez la dernière version du SDK Cloud :

    gcloud components update
    

Codes d'état et valeurs TTL par défaut

La mise en cache négative s'applique à des codes d'état spécifiques, répertoriés dans le tableau ci-dessous.

Cloud CDN applique les valeurs TTL par défaut suivantes à ces codes d'état :

Code d'état Signification Valeur TTL
HTTP 300 Choix multiples 10 minutes
HTTP 301 et 308 Redirections permanentes 10 minutes
HTTP 404 Introuvables 120 secondes
HTTP 405 Méthode introuvable 60 secondes
HTTP 410 Supprimé 120 secondes
HTTP 421 Requête mal dirigée 60 secondes
HTTP 451 Inaccessible pour des raisons d'ordre juridique 120 secondes
HTTP 501 Non mis en œuvre 60 secondes

Vous pouvez remplacer ces valeurs par défaut via la mise en cache négative en définissant une valeur TTL de cache pour le code d'état HTTP spécifié.

Configurer la mise en cache négative

La mise en cache négative vous permet de configurer votre service pour qu'il mette en cache à la fois les échecs et les réussites.

Lorsqu'un backend ne fonctionne pas de façon optimale, il peut connaître une augmentation du trafic, car les réponses sont généralement des réponses réussies mises en cache. Pendant la période de latence élevée, les réponses sont toujours récupérées à l'état à jour, ce qui peut retarder la mise en ligne du backend. En mettant en cache les réponses échouées telles que les erreurs internes du serveur (500) pendant de courtes périodes, Cloud CDN libère du temps pour la récupération des erreurs.

Console

  1. Dans Google Cloud Console, accédez à la page Équilibrage de charge.

    Accéder à la page Équilibrage de charge

  2. Cliquez sur le nom de votre équilibreur de charge HTTP(S) externe.
  3. Cliquez sur Modifier .
  4. Dans Configuration du backend, sélectionnez un backend, puis cliquez sur Modifier .
  5. Assurez-vous que l'option Activer Cloud CDN est sélectionnée.
  6. En bas de la fenêtre, cliquez sur Configurations avancées.
  7. Cliquez sur Activer la mise en cache négative.
  8. Cliquez sur Ajouter une règle de mise en cache négative.
    1. Saisissez un code d'état HTTP.
    2. Sélectionnez une valeur de TTL (Time To Live).
  9. Cliquez sur Mettre à jour.
  10. Cliquez à nouveau sur Mettre à jour.

gcloud

Pour les buckets de backend, exécutez la commande gcloud beta compute backend-buckets create ou gcloud beta compute backend-buckets update avec l'option --negative-caching.

Pour les services de backend, exécutez la commande gcloud beta compute backend-services create ou gcloud beta compute backend-services update avec l'option --negative-caching.

gcloud beta compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --negative-caching
gcloud beta compute backend-services (create | update) BACKEND_SERVICE_NAME
    --negative-caching

Pour activer la mise en cache négative de seulement deux réponses d'erreur spécifiques, par exemple, configurez les réponses avec le code d'état 404 pour qu'elles soient mises en cache pendant 60 secondes, et les réponses avec le code d'état 405 pour qu'elles soient mises en cache pendant 120 secondes.

gcloud beta compute backend-services update BACKEND_SERVICE_NAME \
    --negative-caching \
    --cache-mode=CACHE_ALL_STATIC \
    --default-ttl=86400 \
    --negative-caching-policy='404=60,405=120'

api

Pour les buckets de backend, utilisez l'appel d'API Method: backendBuckets.insert ou Method: backendBuckets.update.

Pour les services de backend, utilisez l'appel d'API Method: backendServices.insert ou Method: backendServices.update.

Utilisez l'un des appels d'API suivants :

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

Ajoutez l'extrait suivant au corps de la requête JSON :

"cdnPolicy": {
  "negativeCaching": ON,
  "negativeCachingPolicy": [
    {
      "code": STATUS_CODE,
      "ttl": TTL_SECONDS
    }
  ]
}

La mise en cache négative doit être activée pour que vous puissiez configurer les paramètres de la règle de mise en cache négative (negativeCachingPolicy). Si vous omettez la règle et que la mise en cache négative (negativeCaching) est activée, Cloud CDN utilise les valeurs par défaut répertoriées dans la section Codes d'état et valeurs TTL par défaut.

Lorsque vous spécifiez une règle de mise en cache négative, veillez à spécifier une valeur TTL de cache pour tous les codes de réponse que vous souhaitez mettre en cache. Cloud CDN n'applique aucune mise en cache négative par défaut lorsqu'une règle existe.

Pour STATUS_CODE, vous pouvez spécifier les codes d'état HTTP 300, 301, 308, 404, 405, 410, 421, 451 et 501.

Pour chaque code d'état, vous pouvez spécifier le nombre de secondes pendant lequel mettre en cache les réponses. Omettez le champ TTL pour désactiver la mise en cache négative du code d'état.

La valeur maximale autorisée est de 1 800 secondes (30 minutes). Toutefois, les objets rarement utilisés peuvent être supprimés du cache avant la valeur TTL définie.

Lorsque le mode de cache est défini sur CACHE_ALL_STATIC ou USE_ORIGIN_HEADERS, la mise en cache négative est appliquée aux réponses qui présentent le code de réponse spécifié et ne comportent pas d'en-tête cache-control ou expires. Lorsque le mode de cache est défini sur FORCE_CACHE_ALL, la mise en cache négative s'applique à toutes les réponses présentant le code de réponse spécifié et remplace les en-têtes de mise en cache.

Désactiver la mise en cache négative

Console

  1. Dans Google Cloud Console, accédez à la page Équilibrage de charge.

    Accéder à la page Équilibrage de charge

  2. Cliquez sur le nom de votre équilibreur de charge HTTP(S) externe.
  3. Cliquez sur Modifier .
  4. Dans Configuration du backend, sélectionnez un backend, puis cliquez sur Modifier .
  5. Assurez-vous que l'option Activer Cloud CDN est sélectionnée.
  6. En bas de la fenêtre, cliquez sur Configurations avancées.
  7. Cliquez sur Activer la mise en cache négative.
  8. Supprimez toutes les règles de mise en cache négative.
  9. Décochez la case Activer la mise en cache négative.
  10. Cliquez sur Mettre à jour.
  11. Cliquez à nouveau sur Mettre à jour.

gcloud

Pour les buckets de backend, exécutez la commande gcloud beta compute backend-buckets create ou gcloud beta compute backend-buckets update avec l'option --no-negative-caching.

Pour les services de backend, exécutez la commande gcloud beta compute backend-services create ou gcloud beta compute backend-services update avec l'option --no-negative-caching.

gcloud beta compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME)
    --no-negative-caching

api

Pour les buckets de backend, utilisez l'appel d'API Method: backendBuckets.insert ou Method: backendBuckets.update.

Pour les services de backend, utilisez l'appel d'API Method: backendServices.insert ou Method: backendServices.update.

Utilisez l'un des appels d'API suivants :

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

Ajoutez l'extrait suivant au corps de la requête JSON :

"cdnPolicy": {
  "negativeCaching": OFF
}