Kennisbank
1.000 veelgestelde vragen, 500 tutorials en uitlegvideo's. Hier vind je alleen maar oplossingen!
Varnish gebruiken op een cloudserver
Deze handleiding geeft verschillende voorbeelden van het gebruik van Varnish op een Infomaniak Cloud-server.
Voorwoord
- Voor verdere hulp kunt u contact opnemen met een partner of gratis een offerte aanvragen – u kunt ook meer te weten komen over de rol van de hostingprovider.
- Neem de tijd om deze andere handleidingen over de configuratietaal van Varnish (VCL) te bestuderen, zodat u de verwerking van verzoeken, de routing, de caching en vele andere aspecten kunt beheren:
Varnish-configuratie
Na de installatie omvat de configuratie van Varnish belangrijke regels voor het cachen en het wissen van gegevens. Zorg ervoor dat u per ongeluk geen ongewenste IP-adressen toestaat.
Hier is een voorbeeld van een basisconfiguratiebestand met enkele veelvoorkomende scenario's en verschillende acties/regels in één voorbeeld:
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;
}
}Wissen via de CLI-interface
Vanaf dit punt werken de in de bovenstaande configuratie genoemde regels voor alle verzoeken, dus als de geconfigureerde website "domain.xyz" is, kunt u eenvoudig het CLI-tool "curl" gebruiken en het volgende doen:
# 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>En daarmee is de homepage gewist. Of om een andere URL te wissen, hoeft u de aanvraag alleen maar naar die URL om te leiden:
# 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>Of, zoals aangegeven in de VCL-configuratie, alle afbeeldingen verwijderen:
# 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>Verwijderen via een CMS
Dit scenario is iets lastiger uit te leggen, omdat er veel manieren zijn om de cache vanuit een backend te beheren. In het bovenstaande configuratievoorbeeld wordt een controle toegevoegd via de header "Uncacheable", waarmee de cache wordt uitgeschakeld. Met deze optie kan elk CMS eenvoudig deze header aan het antwoord toevoegen om de cache voor dit verzoek uit te schakelen.
Vanuit elke PHP-code en met de bovenstaande configuratie kunt u eenvoudig een HTTP-verzoek verzenden en de volgende code gebruiken om de cache te wissen:
<?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);
}
?>Link naar deze veelgestelde vragen: https://faq.infomaniak.com/2592
Is deze veelgestelde vragenlijst nuttig geweest?