Utilizzo della memorizzazione negativa nella cache

Questa pagina fornisce istruzioni per l'utilizzo della memorizzazione nella cache negativa con Cloud CDN. La memorizzazione nella cache negativa consente di impostare un TTL diverso per ogni codice di stato.

Il motivo è applicare un controllo granulare sulla memorizzazione nella cache per errori o reindirizzamenti comuni. Questo può ridurre il carico sulle tue origini e migliorare l'esperienza dell'utente finale riducendo la latenza delle risposte.

Prima di iniziare

  • Leggi informazioni sulle modalità di cache e sui contenuti statici.

  • Assicurati che Cloud CDN sia abilitato; per le istruzioni, vedi Utilizzare Cloud CDN.

  • Se necessario, esegui l'aggiornamento all'ultima versione dell'interfaccia a riga di comando di Google Cloud:

    gcloud components update
    

Codici di stato e TTL predefiniti

La memorizzazione nella cache negativa si applica a codici di stato specifici, elencati nella tabella seguente.

Cloud CDN applica i seguenti TTL predefiniti ai seguenti codici di stato:

Codice di stato Significato TTL
HTTP 300 Scelte multiple 10 minuti
HTTP 301 e 308 Reindirizzamenti permanenti 10 minuti
HTTP 302 e 307 Reindirizzamenti temporanei Non memorizzata nella cache per impostazione predefinita
HTTP 404 Non trovato 120 secondi
HTTP 405 Metodo non trovato 60 secondi
HTTP 410 Gone (Non più disponibile) 120 secondi
HTTP 421 Richiesta non reindirizzata 60 secondi
HTTP 451 Non disponibile per motivi legali 120 secondi
HTTP 501 Non implementato 60 secondi

Puoi sostituire questi valori predefiniti utilizzando la memorizzazione nella cache negativa per impostare un TTL di cache per il codice di stato HTTP specificato.

Configurazione della memorizzazione nella cache negativa

La memorizzazione nella cache negativa consente di configurare il servizio in modo da memorizzare nella cache sia le operazioni riuscite sia quelle non riuscite. Ciò consente a Cloud CDN di proteggere le origini dalle richieste che generano errori (come 404 Not Found) nello stesso modo in cui protegge le origini dalle richieste che generano risposte positive.

Console

  1. In Google Cloud Console, vai alla pagina Bilanciamento del carico.

    Vai alla pagina Bilanciamento del carico

  2. Fai clic sul nome del bilanciatore del carico HTTP(S) esterno.
  3. Fai clic su Modifica .
  4. In Configurazione backend, seleziona un backend e fai clic su Modifica .
  5. Assicurati che l'opzione Abilita Cloud CDN sia selezionata.
  6. Nella parte inferiore della finestra, fai clic su Configurazioni avanzate.
  7. Fai clic su Attiva memorizzazione nella cache negativa.
  8. Fai clic su Aggiungi criterio di memorizzazione nella cache negativa.
    1. Inserisci un codice di stato HTTP.
    2. Seleziona un valore TTL (Time to Live cache).
  9. Fai clic su Aggiorna.
  10. Fai di nuovo clic su Aggiorna.

gcloud

Per i bucket di backend, utilizza il comando gcloud compute backend-buckets create o gcloud compute backend-buckets update con il flag --negative-caching.

Per i servizi di backend, utilizza il comando gcloud compute backend-services create o gcloud compute backend-services update con il flag --negative-caching.

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

Per abilitare la memorizzazione nella cache negativa di solo due specifiche risposte di errore, ad esempio, imposta le risposte con codice di stato 404 in modo che vengano memorizzate nella cache per 60 secondi e le risposte con codice di stato 405 per essere memorizzate nella cache per 120 secondi.

gcloud 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

Per i bucket di backend, utilizza la chiamata API Method: backendbuckets.insert o Method: backendbuckets.update.

Per i servizi di backend, utilizza la chiamata API Method: backendServices.insert o Metodo: servizi backend.update.

Utilizza una delle seguenti chiamate API:

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

Aggiungi il seguente snippet al corpo della richiesta JSON:

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

Per configurare le impostazioni negativeCachingPolicy, devi attivare la memorizzazione nella cache negativa. Se ometti il criterio e hai abilitato negativeCaching, Cloud CDN utilizza i valori predefiniti elencati nei codici di stato e nei TTL predefiniti.

Quando specifichi un criterio di memorizzazione nella cache negativa, assicurati di specificare un TTL di cache per tutti i codici di risposta che vuoi memorizzare nella cache. Cloud CDN non applica nessuna memorizzazione nella cache predefinita predefinita quando esiste un criterio.

Per STATUS_CODE, puoi specificare i seguenti codici di stato HTTP:

  • 300, 301, 302, 307 e 308
  • 404, 405, 410, 421 e 451
  • 501

Per ogni codice di stato, puoi specificare un numero di secondi per la memorizzazione nella cache delle risposte. Per disattivare la memorizzazione nella cache negativa per il codice di stato, ometti il codice dall'elenco relativo a negativeCachingPolicy. Un TTL pari a zero disattiva anche la memorizzazione nella cache, ma la best practice prevede di omettere semplicemente il codice dall'elenco.

Il valore massimo consentito è 1800 secondi (30 minuti); tuttavia, gli oggetti a cui si accede raramente possono essere eliminati dalla cache prima del TTL definito.

Quando la modalità cache è impostata su CACHE_ALL_STATIC o USE_ORIGIN_HEADERS, la memorizzazione nella cache negativa viene applicata alle risposte con il codice di risposta specificato privo di intestazioni Cache-Control o Expires.

Quando la modalità cache è impostata su FORCE_CACHE_ALL, la memorizzazione nella cache negativa sostituisce qualsiasi intestazione di memorizzazione nella cache impostata dall'origine e Cloud CDN memorizza nella cache la risposta per il periodo di tempo specificato dal TTL, altrimenti non la memorizza nella cache se non è impostato alcun TTL.

Inoltre, quando la modalità cache è impostata su FORCE_CACHE_ALL, Cloud CDN modifica anche il valore max-age inviato al client nell'intestazione Cache-Control. In particolare, se un determinato errore presenta un'impostazione TTL configurata, Cloud CDN prenderà il valore minore dell'impostazione TTL e dell'impostazione di configurazione client_ttl e invierà un'intestazione Cache-Control: public,max-age=N con tale valore. Se per un determinato errore non è stata configurata un'impostazione TTL, Cloud CDN rimuoverà tutte le intestazioni Cache-Control inviate dall'origine. Inoltre, Cloud CDN rimuoverà sempre le intestazioni Expires inviate dall'origine.

Disattiva memorizzazione nella cache negativa

Console

  1. In Google Cloud Console, vai alla pagina Bilanciamento del carico.

    Vai alla pagina Bilanciamento del carico

  2. Fai clic sul nome del bilanciatore del carico HTTP(S) esterno.
  3. Fai clic su Modifica .
  4. In Configurazione backend, seleziona un backend e fai clic su Modifica .
  5. Assicurati che l'opzione Abilita Cloud CDN sia selezionata.
  6. Nella parte inferiore della finestra, fai clic su Configurazioni avanzate.
  7. Deseleziona la casella di controllo accanto ad Attiva memorizzazione nella cache negativa.
  8. Fai clic su Aggiorna.
  9. Fai di nuovo clic su Aggiorna.

gcloud

Per i bucket di backend, utilizza il comando gcloud compute backend-buckets create o gcloud compute backend-buckets update con il flag --no-negative-caching.

Per i servizi di backend, utilizza il comando gcloud compute backend-services create o gcloud compute backend-services update con il flag --no-negative-caching.

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

api

Per i bucket di backend, utilizza la chiamata API Method: backendbuckets.insert o Method: backendbuckets.update.

Per i servizi di backend, utilizza la chiamata API Method: backendServices.insert o Metodo: servizi backend.update.

Utilizza una delle seguenti chiamate API:

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

Aggiungi il seguente snippet al corpo della richiesta JSON:

"cdnPolicy": {
  "negativeCaching": OFF
}