Come configurare le intestazioni di controllo della cache in NGINX

Contenuti

La memorizzazione nella cache è la procedura di memorizzazione dei dati scaricati per un uso successivo, dove possono essere letti dal disco invece di richiederli di nuovo. Fare un uso corretto del tuo browser e della cache CDN può velocizzare notevolmente il tuo portale web.

Come funziona la memorizzazione nella cache??

Il browser di ogni utente ha una cache integrata, che memorizza oggetti statici scaricati da siti web. La prossima volta che si connettono, se l'oggetto che stanno richiedendo è ancora nella cache, verrà caricato dalla memoria invece di richiederlo di nuovo, che accelererà notevolmente le prestazioni e ridurrà il carico sul tuo server web nella procedura.

Il browser dell'utente è una cache lato client. Nonostante questo, molti siti di grandi dimensioni utilizzeranno anche una rete di distribuzione dei contenuti o CDN. Il CDN si trova di fronte al tuo server web e memorizza nella cache le tue pagine sul lato server, generalmente su vari edge server situati in tutto il mondo. Ciò migliora la latenza di accesso, prestazioni e riduce notevolmente lo stress sul tuo server web. Per maggiori informazioni sui CDN, puoi leggere la nostra guida qui.

Cache-Control è un'intestazione che puoi configurare il tuo server web per aggiungere a tutte le richieste in uscita. Quando lo usi, puoi specificare quali risorse sono memorizzate nella cache e per quanto tempo. Nonostante questo, ci sono alcune cose a cui prestare attenzione prima di aggiungerlo all'intero sito.

Alcune pagine dovrebbero Mai essere memorizzato nella cache. Tutto ciò che richiede l'accesso di un utente non dovrebbe essere memorizzato nella cache da un CDN, altrimenti corri il rischio mostrare le informazioni personali di un utente ad altri. Puoi ancora memorizzare nella cache questo tipo di pagine solo sul lato browser (Collocamento Cache-Control per private). Come regola generale, se la pagina sarà esattamente la stessa per tutti gli utenti, come la tua home page, può memorizzarlo nella cache. Risorse statiche, come CSS e immagini, generalmente può essere memorizzato nella cache, spesso per molto più tempo.

Dovrai anche assicurarti di determinare valori di durata ragionevoli. (TTL) per ogni risorsa. TTL controlla per quanto tempo l'oggetto rimarrà nella cache prima di essere invalidato, cosa spinge l'utente a richiedere un nuovo oggetto. Il compromesso qui è tra un lungo tempo di memorizzazione nella cache e aggiornamenti rapidi.. Non vuoi mettere nella cache la tua home page per un anno intero, perché potrei cambiare qualcosa martedì. Determinare un'età massima di pochi minuti per la tua home page è abbastanza lungo da coprire ricariche immediate e abbastanza veloce da consentire una rapida diffusione degli aggiornamenti.. Nonostante questo, per risorse statiche come le immagini, è possibile che non cambino mai, e dovrebbe andare bene impostare valori TTL elevati, anche fino a due anni.

Puoi sempre usare nomi di file con versione per attivare un ricaricamento della cache. Se pubblichi una nuova versione di un foglio di stile CSS, puoi nominarlo styles-1.0.1.css, e il browser dell'utente (e qualsiasi CDN di fronte ad esso) lo vedrai come un nuovo file che deve essere scaricato di nuovo. Allo stesso tempo, per alcuni CDN, puoi eseguire sostituzioni manuali per svuotare la cache esistente senza modificare alcun nome di file.

Come usare Cache-Control in NGINX

Cache-Control hai alcune opzioni:

  • public – Chiunque può memorizzarlo nella cache, inclusi browser e CDN. Usalo per la maggior parte degli oggetti statici.
  • private – Contiene dati sensibili che non possono essere memorizzati nella cache tramite CDN o proxy inversi. Il browser dell'utente può memorizzarlo nella cache locale. Usa questo per la maggior parte delle pagine autenticate.
  • no-cache – Nonostante il nome, non disabilitare la memorizzazione nella cache. Il browser può ancora memorizzare nella cache la soluzione per le prestazioni, ma è necessario verificare con il server di origine gli aggiornamenti prima di utilizzarlo. Usa questo se vuoi che l'utente riconvalidi ogni volta
  • no-store – Disabilita completamente la memorizzazione nella cache. Usalo solo per dati altamente riservati che non devono essere inviati due volte.

Quando si imposta il max-age, sempre fatto in pochi secondi. Nonostante questo, NGINX abilita alcuni altri valori personalizzati:

  • -1, oh off, che disabiliterà la memorizzazione nella cache e non modificherà le intestazioni esistenti
  • epoch, impostato su Unix tempo zero, che disabiliterà esplicitamente la memorizzazione nella cache ed eliminerà tutte le cache (utile se stai usando NGINX come proxy inverso)
  • max, che scadrà quando l'universo finirà, il 31 da dicembre a 2037
  • 30s, per secondi
  • 1m, al minuto
  • 24h, per ore
  • 3d, per giorni
  • 1M, per mesi
  • 2y, durante gli anni

Allo stesso tempo, puoi aggiungere il no-transform direttiva, che disabilita qualsiasi conversione effettuabile sulla risorsa. Come esempio, alcuni CDN comprimono le immagini per ridurre la larghezza di banda. Questa direttiva disabilita quel comportamento.

Per NGINX, puoi modificare le intestazioni Cache-Control con le seguenti direttive:

scade 1e;
add_header Cache-Control "pubblico, non trasformabile";

La prima riga imposta l'età massima in 1 anno e il secondo stabilisce il public e no-transform impostazioni di memorizzazione nella cache. Puoi aggiungerlo a a server blocca l'applicazione a tutto il sito, ma un metodo migliore è abbinare le estensioni dei file a un blocco di posizione per determinare valori diversi in base all'estensione del file:

Posizione ~* .(?:css|js)$ {
  scade 1e;
  add_header Controllo cache "pubblico";
}

Questo blocco di posizione utilizza una corrispondenza di espressioni regolari, indicato da ~. Questo è utile per applicare le impostazioni generali per il tipo di contenuto. Se vuoi fare eccezioni per località specifiche, puoi usare un normale blocco di posizione, che avrà la precedenza su una corrispondenza regolare.

posizione/profilo {
    scade 2d;
    add_header Cache-Control "pubblico, non trasformabile";
}

Puoi anche usare il = modificatore, che corrisponde esattamente ai percorsi e avrà la precedenza su una corrispondenza regolare e un blocco di posizione standard.

Usa Surrogate-Control per modificare il comportamento del CDN

Sebbene sia possibile disabilitare la memorizzazione nella cache CDN e sfruttare comunque la memorizzazione nella cache del browser utilizzando Cache-Control: private, è meglio avere il controllo diretto su di esso. La maggior parte dei CDN rispetterà il Surrogate-Control intestazione, che funziona esattamente come Cache-Control, tranne che è inteso solo per CDN. così, puoi dire a Fastly di fare una cosa e all'utente di farne un'altra.

e NGINX, dovrai configurare questa intestazione manualmente e configurare il max-age value invece di usare NGINX expires direttiva.

add_header Controllo surrogato "pubblico, età massima=86400";
add_header Cache-Control "pubblico, età massima=120";

Sicuramente vorrai testare con il tuo CDN per verificare che funzioni.Surrogate-Control è abbastanza nuovo e non è universale.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.