Questa guida mostra come configurare correttamente le impostazioni di scadenza dell'intestazione con Apache, ottimizzando le prestazioni del server web nel servire file statici, come immagini, file CSS o JavaScript.
Verrà salvata molta larghezza di banda sul tuo server, impostando una data minima per la memorizzazione nella cache del file. Di conseguenza, utilizzando la cache del browser client, i siti Web ospitati verranno caricati più velocemente.
Per prima cosa, connettiti al tuo server tramite una connessione SSH. Se non l'hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in modo sicuro con SSH. Nel caso di un server locale, vai al passaggio successivo e apri il terminale del tuo server.
Abilitazione dei moduli necessari
Per abilitare l'invio degli Header necessari, abilita prima il relativo modulo Apache:
$ sudo a2enmod expires
E poi riavvia il servizio:
$ sudo service apache2 restart
Configurazione del modulo
La configurazione del modulo può essere inserita in:
In configurazione Apache:sarà ereditato da tutti i siti controllati da Apache (host virtuali e non virtuali)
In un contenitore host virtuale
All'interno della direttiva
o del file .htaccess
Nell'esempio seguente è inserita nella configurazione di default del sito:
$ sudo vim /etc/apache2/sites-available/000-default.conf
Quindi aggiungi la seguente configurazione:
<IfModule mod_expires.c>
<FilesMatch "\.(jpe?g|png|gif|js|css)$">
ExpiresActive On
ExpiresDefault "access plus 1 week"
</FilesMatch>
</IfModule>
Attraverso la direttiva FilesMatch vengono specificati i file che devono essere conservati dal browser del client (in questo caso css, jpg, png, gif e js).hile, tramite ExpiresDefault, per quanto tempo devono essere conservati (in questo esempio, una settimana) per viene indicata.
Per applicare le modifiche, riavvia Apache:
$ sudo service apache2 restart
Oltre al metodo FilesMatch e ExpiresDefault, ExpiresByType può essere utilizzato per impostare l'intestazione Expires per ogni tipo di file, ad esempio:
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/jpg "access plus 60 days"
ExpiresByType image/png "access plus 60 days"
ExpiresByType image/gif "access plus 60 days"
ExpiresByType image/jpeg "access plus 60 days"
ExpiresByType text/css "access plus 1 days"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/javascript "access plus 1 week"
</IfModule>
Utilizzando questo metodo è possibile ottenere un controllo più granulare sulla durata della cache e la memorizzazione nella cache dei dati Ajax, non inserendo l'applicazione/javascript di tipo mime.
Per entrambe le direttive la sintassi per indicare la durata della cache è la stessa, ovvero:
“[base] plus [valore] [tipo] [valore] [tipo] [valore] [tipo] …”
Il valore di base può essere:
accesso:data richiesta cliente
modifica:data di modifica del file
Mentre il tipo può avere i seguenti valori:
anni:anni
mesi:mesi
settimane:settimane
giorni:giorni
ore:ore
minuti:minuti
secondi:secondi
Alcuni esempi di configurazione sono:
# One year cache expiry
ExpiresByType image/jpeg "access plus 1 year"
#Furthermore, more than one unit of measurement in sequence can be added. For example:
# Set 1-month, 15- day and 2-hour expiry
ExpiresByType text/html "access plus 1 month 15 days 2 hours"
# Cache expiry from the file modification date more than 5 hours and 3 minutes
ExpiresByType image/gif "modification plus 5 hours 3 minutes"
Per favore, ricorda che se devi modificare il contenuto di un file memorizzato nella cache, quest'ultimo non verrà scaricato dai client fino allo scadere del tempo di memorizzazione nella cache. Ciò potrebbe causare malfunzionamenti sui tuoi siti web.
Sebbene i client non possano essere obbligati a ignorare la cache precedentemente salvata, è possibile utilizzare diverse tecniche per evitare questo problema.
Un metodo spesso utilizzato è rinominare il file appena modificato (ad esempio da style.css a style-v2.css) o modificare i collegamenti aggiungendo un numero di versione, ad esempio da:
<script src="https://www.domain.com/js/myScript1.js"></script>
al seguente:
<script src="https://www.domain.com/js/myScript1.js?v=3.1"></script>