1000 FAQ, 500 tutorial e video esplicativi. Qui ci sono delle soluzioni!
Utilizzo di Varnish su un server cloud
Questa guida presenta diversi esempi di utilizzo di Varnish su Server Cloud gestito da Infomaniak.
⚠️ Per ulteriori aiuti, contatta un partner o compila un bando — leggi anche il ruolo dell'hosting
Configurazione di Varnish
Ecco come potrebbe apparire un file di configurazione di base con alcuni casi comuni e diverse azioni/regole in un singolo esempio:
vcl 4.0;
# Questo non dovrebbe essere modificato
backend default {
.host = "127.0.0.80";
.port = "80";
}
# Un ACL è una "Lista di controllo degli accessi", che definisce una lista di indirizzi IP, successivamente riutilizzata in una regola, ad esempio "Chi può eliminare la cache"
acl purge {
"localhost";
"1.2.3.4"; # Il mio IP di casa
"42.42.42.0"/24; # Intervallo di indirizzi IP pubblici della mia azienda
! "42.42.42.7"; # Eccetto qualche fastidioso collega
}
# Si verifica quando Varnish riceve per la prima volta la richiesta, prima di inviarla al backend
sub vcl_recv {
# Consentire l'eliminazione della cache
if (req.method == "PURGE") {
# Non da un IP consentito? Allora muori con un errore.
if (!client.ip ~ purge) { # purge è l'ACL definito all'inizio
# 'synth' è una funzione che restituisce una pagina (senza chiedere al backend) che non verrà memorizzata nella cache.
return (synth(405, "Questo IP non è autorizzato a inviare richieste PURGE."));
}
# Se sei arrivato a questo punto (e non hai avuto errori prima), elimina il risultato memorizzato nella cache
return (purge);
}
# Consentire l'eliminazione della cache di tutte le immagini, ad esempio
if (req.method == "PURGEALL" && req.url == "/images") {
if (!client.ip ~ purge) {
return (synth(405, "Questo IP non è autorizzato a inviare richieste PURGE."));
}
# La funzione 'ban' è una funzione integrata che consente di invalidare tutti gli oggetti nella cache che corrispondono all'espressione specificata
ban("req.url ~ \.(jpg|png|gif|svg)$");
return (synth(200, "Immagini eliminate dalla cache."));
}
# Le pagine con autorizzazione non vengono memorizzate nella cache
if (req.http.Authorization) {
# Con l'azione 'pass', la richiesta verrà passata direttamente dal backend senza entrare nella cache
return (pass);
}
}
# Si verifica dopo aver letto gli intestazioni di risposta dal backend.
# Qui si puliscono gli intestazioni di risposta, si definisce se la richiesta deve essere memorizzata nella cache, per quanto tempo, ecc.
sub vcl_backend_response {
# Memorizza in cache tutte le immagini per 1 giorno per impostazione predefinita
if (beresp.http.content-type ~ "image") {
set beresp.ttl = 1d;
}
# Se il server imposta un'intestazione "uncacheable", non memorizzare la risposta nella cache
if (beresp.http.uncacheable) {
set beresp.uncacheable = true;
}
}
Pulizia dalla riga di comando (CLI)
Da qui, le regole stabilite nella configurazione sopra menzionata si applicano a tutte le richieste, quindi se il sito configurato è "dominio.xyz", puoi semplicemente utilizzare lo strumento CLI "curl" e fare quanto segue:
$ curl -X PURGE https://dominio.xyz/
Errore 200 Ripulito
Ripulito
Meditazione del Guru:
XID: 2
Server di cache Varnish
E così, la pagina iniziale è stata ripulita. Oppure, per ripulire un'altra URL, basta puntare la richiesta su di essa:
$ curl -X PURGE https://dominio.xyz/percorso_qualunque/file.html
Errore 200 Ripulito
Ripulito
Meditazione del Guru:
XID: 4
Server di cache Varnish
O, come indicato nella configurazione VCL, ripulire tutte le immagini:
$ curl -X PURGEALL https://dominio.xyz/immagini
Errore 200 Immagini Ripulite.
Immagini Ripulite.
Meditazione del Guru:
XID: 32770
Server di cache Varnish
Pulizia da un CMS
È un po' più difficile illustrare questo caso perché ci sono molte modalità di gestione della cache da un backend. Nell'esempio di configurazione sopra, ad esempio, è aggiunto un controllo sull'intestazione "Uncacheable", che disabilita la cache. Con questa opzione, qualsiasi CMS può semplicemente impostare questa intestazione sulla risposta per disabilitare la cache di questa richiesta, ad esempio.
Da qualsiasi codice PHP e con la configurazione sopra, puoi semplicemente inviare una richiesta HTTP e utilizzare questo frammento per eseguire una pulizia della cache:
if ($curl = curl_init("http://127.0.0.1/qualche_url")) {
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "PURGE",
CURLOPT_HTTPHEADER => [
"Host: {$_SERVER['HTTP_HOST']}"
]
]);
curl_exec($curl);
se (curl_getinfo($curl, CURLINFO_HTTP_CODE) == 200) {
echo "Cache ripulita!";
}
curl_close($curl);
}
Per saperne di più
Link utili sul linguaggio di configurazione di Varnish (VCL) per controllare l'elaborazione delle richieste, il routing, la cache e molti altri aspetti: