Questo tutorial spiega come configurare nginx per impostare l'intestazione HTTP Expires e la direttiva max-age dell'intestazione HTTP Cache-Control di file statici (come immagini, file CSS e Javascript) su una data futura in modo che questi file sarà memorizzato nella cache dai browser dei tuoi visitatori. Ciò consente di risparmiare larghezza di banda e rendere il tuo sito web più veloce (se un utente visita il tuo sito per la seconda volta, i file statici verranno recuperati dalla cache del browser).
1 Nota preliminare
Suppongo che tu abbia una configurazione nginx funzionante, ad es. come mostrato in questo tutorial: Installazione di Nginx con PHP 7 e MySQL 5.7 (LEMP) su Ubuntu 16.04 LTS
2 Configurazione di nginx
L'intestazione HTTP Expires può essere impostata con l'aiuto della direttiva require che può essere inserita all'interno di http {}, server {}, posizione {} o un'istruzione if all'interno di un blocco posizione {}. Di solito lo utilizzerai in un blocco di posizione per i tuoi file statici, ad es. come segue:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
Nell'esempio precedente, tutti i file .jpg, .jpeg, .png, .gif, .ico, .css e .js ottengono un'intestazione Expires con una data di 365 giorni nel futuro dall'ora di accesso del browser. Pertanto, dovresti assicurarti che il blocco posizione {} contenga solo file statici che possono essere memorizzati nella cache dai browser.
Ricarica nginx dopo le modifiche:
/etc/init.d/nginx reload
È possibile utilizzare le seguenti impostazioni dell'ora con la direttiva di scadenza:
- off fa in modo che le intestazioni Expires e Cache-Control non vengano modificate.
- epoch imposta l'intestazione Expires al 1 gennaio 1970 00:00:01 GMT.
- max imposta l'intestazione Expires al 31 dicembre 2037 23:59:59 GMT e l'età massima di Cache-Control a 10 anni.
- Un tempo senza prefisso @ indica un tempo di scadenza relativo al tempo di accesso al browser. È possibile specificare un tempo negativo, che imposta l'intestazione Cache-Control su no-cache. Esempio:scade 10d; o scade 14w3d;
- Un'ora con un prefisso @ specifica una scadenza assoluta dell'ora del giorno, scritta nella forma Hh o Hh:Mm, dove H è compreso tra 0 e 24 e M è compreso tra 0 e 59. Esempio:scade @ 15:34;
Puoi utilizzare le seguenti unità di tempo:
- ms:millisecondi
- s:secondi
- m:minuti
- h:ore
- d:giorni
- w:settimane
- M:mesi (30 giorni)
- y:anni (365 giorni)
Esempi:1h30m per un'ora e trenta minuti, 1y6M per un anno e sei mesi.
Si noti inoltre che se si utilizza un'intestazione Expires molto futura, è necessario modificare il nome del file del componente ogni volta che il componente cambia. Pertanto è una buona idea eseguire la versione dei file. Ad esempio, se si dispone di un file javascript.js e si desidera modificarlo, è necessario aggiungere un numero di versione al nome del file modificato (ad esempio javascript-1.1.js) in modo che i browser debbano scaricarlo. Se non modifichi il nome del file, i browser caricheranno il (vecchio) file dalla loro cache.
Invece di basare l'intestazione Expires sul tempo di accesso del browser (ad es. scade 10d;), puoi anche basarla sulla data di modifica di un file (tieni presente che funziona solo per i file reali che sono archiviati sul disco rigido! ) utilizzando la parola chiave modificata che precede l'ora:
expires modified 10d;
3 Test
Per verificare se la tua configurazione funziona, puoi utilizzare la funzione Analisi di rete degli Strumenti per sviluppatori nel browser Firefox e accedere a un file statico tramite Firefox (ad es. un'immagine). Nell'output dell'intestazione, dovresti ora vedere un'intestazione Expires e un'intestazione Cache-Control con una direttiva max-age (max-age contiene un valore in secondi, ad esempio 31536000 è un anno nel futuro):
4 link
- nginx HttpHeadersModule:http://wiki.nginx.org/HttpHeadersModule
Informazioni sull'autore
Falko Timme è il proprietario di Timme Hosting (hosting web nginx ultra veloce). È il principale manutentore di HowtoForge (dal 2005) e uno dei principali sviluppatori di ISPConfig (dal 2000). Ha anche contribuito al libro di O'Reilly "Linux System Administration".