Come Configurare le Intestazioni Cache-Control in NGINX

0
277

La cache è il processo di memorizzazione dei dati scaricati per un uso successivo, dove si può leggere dal disco, anziché richiedere di nuovo. Facendo uso corretto del tuo browser e di caching CDN può velocizzare il tuo sito web in modo significativo.

Come Nella Cache?

Ogni browser ha un built-in cache che memorizza gli oggetti statici scaricati da siti web. La prossima volta che si collegano, se l’oggetto che stai chiedendo è ancora nella cache, verrà caricata dalla memoria piuttosto che chiedere di nuovo, velocizzando notevolmente le prestazioni e ridurre il carico sul server web nel processo.

Il browser dell’utente è una cache sul lato client. Tuttavia, molti siti di grandi dimensioni anche fare uso di un Content Delivery Network, o CDN. Il CDN si siede davanti al vostro web server, e memorizza nella cache le pagine sul lato server, di solito più edge server dislocati in tutto il mondo. Questo migliora la latenza di accesso, le prestazioni e riduce notevolmente lo stress sul vostro web server. Se vuoi saperne di più su Cdn, potete leggere la nostra guida su di loro qui.

Cache-Control è un’intestazione che è possibile configurare il server web per aggiungere a tutte le richieste in uscita. Utilizzandolo, è possibile specificare quali risorse vengono memorizzati nella cache, e per quanto tempo. C’è un paio di cose da notare però prima di andare aggiunta a livello di sito.

Alcune pagine non dovrebbe mai essere memorizzati nella cache. Tutto ciò che richiede un utente, per accedere, non dovrebbe essere messa in una CDN, altrimenti si corre il rischio di visualizzazione di un utente informazioni personali ad altri. Si può comunque memorizzare questi tipi di pagine sul browser da soli (con impostazione Cache-Control, privato). Come regola generale, se la pagina sta per essere esattamente lo stesso per tutti gli utenti, come la home page, è possibile memorizzare. Risorse statiche, come CSS e le immagini, di solito possono essere memorizzati nella cache, spesso molto più a lungo.

Potrai anche voler assicurarsi che si sta impostando ragionevole Time-To-Live (TTL) valori per ciascuna risorsa. TTL controlla per quanto tempo l’oggetto rimarrà in cache prima di essere invalidato, richiedendo all’utente di richiedere un nuovo oggetto. Il trade-off è qui tra un lungo tempo di caching e veloci aggiornamenti. Non si desidera memorizzare nella cache la pagina di casa per un anno intero, perché si potrebbe cambiare qualcosa di martedì. L’impostazione di un età max di circa un paio di minuti per la tua home page è abbastanza a lungo per coprire immediata ricarica, e abbastanza veloce per permettere una rapida propagazione degli aggiornamenti. Tuttavia, per le risorse statiche, come immagini, non potranno mai cambiare, e si dovrebbe andare bene l’impostazione TTL valori, anche come alto come due anni.

È possibile utilizzare sempre la versione nomi di file per attivare una cache di ricarica. Se si rilascia una nuova versione di un foglio di stile CSS, è possibile assegnare un nome di stili-1.0.1.css, e il browser dell’utente (e qualsiasi Cdn davanti a vederlo come un nuovo file che deve essere scaricato di nuovo. Inoltre, per alcuni Cdn, è possibile emettere manuale invalidations per svuotare la cache esistente senza modificare i nomi dei file.

Come Utilizzare Cache-Control in NGINX

Cache-Control ha un paio di opzioni:

  • pubblico – Possono essere memorizzati nella cache da chiunque, compresi i browser e Cdn. Utilizzare questo per la maggior parte di oggetti statici.
  • privato – Contiene dati sensibili che non possono essere memorizzati nella cache dal Cdn o reverse proxy. Il browser dell’utente può cache in locale. Utilizzare questo per la maggior parte autenticato pagine.
  • no-cache – Nonostante il nome, non disattivare la memorizzazione nella cache. Il browser può ancora cache la risposta per le prestazioni, ma deve verificare con il server di origine per gli aggiornamenti prima di utilizzarlo. Utilizzare questa opzione se si desidera che l’utente ogni volta che rinnovo
  • no-store – Disabilita la cache del tutto. Utilizzare questo per i dati sensibili che non devono essere inviati due volte.

Quando si imposta il max-age, è sempre fatto in pochi secondi. Tuttavia, NGINX, permette qualche custom valori:

  • -1 o off, che sarà disattivare la memorizzazione nella cache, e non modificare intestazioni esistenti
  • epoca, set per Unix tempo zero, che esplicitamente disattivare la cache ed eliminare tutti i file di cache (utile se si utilizza NGINX come reverse proxy)
  • max, che scadrà quando l’universo termina il 31 dicembre 2037
  • 30s, per i secondi
  • 1m, per i minuti
  • 24 ore, per ore e ore
  • 3d, per giorni e giorni
  • 1M, per mesi e mesi
  • 2y, per anni

Inoltre, è possibile aggiungere la non-trasformare direttiva, che consente di disattivare tutte le conversioni che può essere fatto per la risorsa. Per esempio, alcuni Cdn comprimere le immagini per ridurre la larghezza di banda. La presente direttiva si disabilita tale comportamento.

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

scade 1y;
add_header Cache-Control “pubblico, non di trasformazione”;

La prima riga imposta il max-età di 1 anno, e il secondo set di pubblico e no-trasformare impostazioni di cache. È possibile aggiungere a questo un blocco del server di applicare a tutto il sito, ma un metodo migliore è quello di abbinare le estensioni di file con un blocco di posizione per impostare valori diversi a seconda dell’estensione del file:

posizione ~* .(?:css|js)$ {
scade 1y;
add_header Cache-Control “pubblica”;
}

Questo blocco di posizione usa un’espressione regolare corrisponde, contrassegnato dal ~. Questo è utile per l’applicazione impostazioni generali per il tipo di contenuto. Se si desidera fare delle eccezioni per le posizioni specifiche, è possibile utilizzare un normale blocco di posizione, che avranno la precedenza su una regex partita.

posizione /profilo {
scade 2d;
add_header Cache-Control “pubblico, non di trasformazione”;
}

È inoltre possibile utilizzare l’ = modificatore, che corrisponde percorsi esattamente, e avranno la precedenza su una regex partita e una posizione standard in blocco.

L’uso di Surrogati di Controllo per Modificare CDN Comportamento

Mentre è possibile disabilitare il caching CDN e ancora sfruttare la cache del browser utilizzando Cache-Control: private, è meglio avere un controllo diretto su di esso. La maggior parte delle Cdn di rispettare il Surrogato di Controllo intestazione, che funziona esattamente come il Controllo della Cache, fatta eccezione solo per Cdn. In questo modo, si può dire Velocemente per fare una cosa, e l’utente a fare altro.

In NGINX, devi impostare l’intestazione manualmente e impostare il max-age valore invece di usare NGINX della scadenza della direttiva.

add_header Surrogato di Controllo “pubblico, max-age=86400”;
add_header Cache-Control “pubblica, max-age=120”;

Sarà sicuramente desidera eseguire il test con il CDN per verificare che questo funziona Surrogato di Controllo è abbastanza nuovo, e non è universale.