1000 FAQ, 500 tutorial e video esplicativi. Qui ci sono delle soluzioni!
Utilizzare Varnish su Server Cloud
Questa guida presenta diversi esempi di utilizzo di Varnish su Server Cloud Infomaniak.
Premessa
- Per ulteriori assistenze contattate un partner o lanciate gratuitamente una richiesta di offerta â scoprite anche il ruolo dell'hosting provider.
- Prendete visione di queste altre guide riguardanti il linguaggio di configurazione Varnish (VCL) per controllare l'elaborazione delle richieste, il routing, la memorizzazione nella cache e diversi altri aspetti:
Configurazione di Varnish
Dopo installazione, la configurazione di Varnish include regole importanti per la memorizzazione nella cache e il purging. Fate attenzione a non autorizzare accidentalmente indirizzi IP non desiderati.
Ecco come potrebbe apparire un file di configurazione di base con alcuni casi comuni e diverse azioni/regole in un solo esempio:
vcl 4.0;
# Configuration du backend par défaut
backend default {
.host = "127.0.0.80"; # Adresse IP du backend
.port = "80"; # Port du backend
}
# Définition d'une liste de contrÎle d'accÚs (ACL) pour les IPs autorisées à purger le cache
acl purge {
"localhost"; # IP locale
"1.2.3.4"; # IP de votre domicile
"42.42.42.0"/24; # Plage d'IP publique de votre entreprise
! "42.42.42.7"; # Exclusion d'une IP spĂ©cifique (ex : un collĂšgue gĂȘnant)
}
# Traitement des requĂȘtes Ă leur rĂ©ception par Varnish
sub vcl_recv {
# Autoriser les requĂȘtes de purge
if (req.method == "PURGE") {
# Vérification si l'IP du client est autorisée à purger
if (!client.ip ~ purge) { # 'purge' fait référence à l'ACL définie plus haut
# Retourne une page d'erreur si l'IP n'est pas autorisée
return (synth(405, "Cette IP n'est pas autorisĂ©e Ă envoyer des requĂȘtes PURGE."));
}
# Si l'IP est autorisĂ©e, purger le cache pour cette requĂȘte
return (purge);
}
# Autoriser la purge de toutes les images via une requĂȘte PURGEALL
if (req.method == "PURGEALL" && req.url == "/images") {
if (!client.ip ~ purge) {
return (synth(405, "Cette IP n'est pas autorisĂ©e Ă envoyer des requĂȘtes PURGE."));
}
# Invalider tous les objets en cache correspondant Ă des images
ban("req.url ~ \.(jpg|png|gif|svg)$");
return (synth(200, "Images purgées."));
}
# Ne pas mettre en cache les pages avec une autorisation (header Authorization)
if (req.http.Authorization) {
# Passer la requĂȘte directement au backend sans la mettre en cache
return (pass);
}
}
# Traitement de la réponse du backend avant de la renvoyer au client
sub vcl_backend_response {
# Mise en cache des images pour une durée de 1 jour
if (beresp.http.content-type ~ "image") {
set beresp.ttl = 1d;
}
# Si le backend indique que la rĂ©ponse ne doit pas ĂȘtre mise en cache, respecter cette consigne
if (beresp.http.uncacheable) {
set beresp.uncacheable = true;
}
}Purge da CLI
Da qui, le regole enunciate nella configurazione sopra funzionano su tutte le richieste, quindi se il sito configurato Ăš "domain.xyz", Ăš possibile utilizzare semplicemente lo strumento CLI "curl" e fare quanto segue:
# Envoyer une requĂȘte PURGE pour purger la page d'accueil de "domain.xyz"
$ curl -X PURGE https://domain.xyz/
# Réponse renvoyée par le serveur Varnish
<!DOCTYPE html>
<html>
<head>
<title>200 Purged</title>
</head>
<body>
<h1>Erreur 200 : Purge effectuée</h1>
<p>La page a été purgée avec succÚs.</p>
<h3>Guru Meditation:</h3>
<p>XID: 2</p>
<hr>
<p>Serveur de cache Varnish</p>
</body>
</html>E cosĂŹ, la home page Ăš stata purgata. Oppure, per purgare un'altra URL, basta indirizzare la richiesta verso quest'ultima:
# Envoyer une requĂȘte PURGE pour purger un fichier spĂ©cifique Ă "domain.xyz"
$ curl -X PURGE https://domain.xyz/some_path/some_file.html
# Réponse renvoyée par le serveur Varnish
<!DOCTYPE html>
<html>
<head>
<title>200 Purged</title>
</head>
<body>
<h1>Erreur 200 : Purge effectuée</h1>
<p>Le fichier a été purgé avec succÚs.</p>
<h3>Guru Meditation:</h3>
<p>XID: 4</p>
<hr>
<p>Serveur de cache Varnish</p>
</body>
</html>Oppure, come indicato nella configurazione VCL, purgare tutte le immagini:
# Envoyer une requĂȘte PURGEALL pour purger toutes les images dans "domain.xyz"
$ curl -X PURGEALL https://domain.xyz/images
# Réponse renvoyée par le serveur Varnish
<!DOCTYPE html>
<html>
<head>
<title>200 Purged images</title>
</head>
<body>
<h1>Erreur 200 : Images purgées</h1>
<p>Toutes les images ont été purgées avec succÚs.</p>
<h3>Guru Meditation:</h3>
<p>XID: 32770</p>
<hr>
<p>Serveur de cache Varnish</p>
</body>
</html>Purge da un CMS
Ă un po' piĂč difficile illustrare questo caso perchĂ© esistono molti modi per gestire la memorizzazione nella cache da un backend. Nell'esempio di configurazione sopra, viene aggiunto un controllo sull'intestazione "Uncacheable", che disattiva la memorizzazione nella cache. Con questa opzione, qualsiasi CMS potrebbe semplicemente impostare questa intestazione sulla risposta per disattivare la memorizzazione nella cache di questa richiesta, ad esempio.
Da qualsiasi codice PHP e con la configurazione sopra, Ăš possibile inviare semplicemente una richiesta HTTP e utilizzare questo estratto per eseguire un PURGE della cache:
<?php
if ($curl = curl_init("http://127.0.0.1/some_url")) {
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "PURGE",
CURLOPT_HTTPHEADER => [
"Host: {$_SERVER['HTTP_HOST']}"
]
]);
curl_exec($curl);
if (curl_getinfo($curl, CURLINFO_HTTP_CODE) == 200) {
echo "Cache purged!";
}
curl_close($curl);
}
?>