1000 FAQ, 500 Anleitungen und Lernvideos. Hier gibt es nur Lösungen!
Varnish auf Cloud-Server verwenden
Dieser Leitfaden stellt mehrere Beispiele für die Verwendung von Varnish auf einem Infomaniak Cloud-Server vor.
Vorwort
- Für weitere Hilfe kontaktieren Sie einen Partner oder starten Sie kostenlos eine Ausschreibung — erfahren Sie auch mehr über die Rolle des Hosting-Anbieters.
- Nehmen Sie sich die Zeit, diese weiteren Leitfäden zum Konfigurationssprache von Varnish (VCL) zur Kenntnis, um die Verarbeitung von Anfragen, das Routing, das Caching und viele weitere Aspekte zu steuern:
Varnish-Konfiguration
Nach der Installation umfasst die Konfiguration von Varnish wichtige Regeln für das Caching und das Löschen. Achten Sie darauf, keine unerwünschten IP-Adressen versehentlich zuzulassen.
Hier ist ein Beispiel für eine Basis-Konfigurationsdatei mit einigen häufigen Fällen und verschiedenen Aktionen/Regeln in einem einzigen Beispiel:
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;
}
}Löschen über die CLI-Schnittstelle
Ab diesem Punkt funktionieren die in der obigen Konfiguration genannten Regeln für alle Anfragen, sodass, wenn die konfigurierte Website "domain.xyz" ist, Sie einfach das CLI-Tool "curl" verwenden und Folgendes tun können:
# 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>Und damit wurde die Startseite gelöscht. Oder um eine andere URL zu löschen, müssen Sie einfach die Anfrage auf diese umleiten:
# 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>Oder, wie in der VCL-Konfiguration angegeben, alle Bilder löschen:
# 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>Löschen über ein CMS
Dieser Fall ist etwas schwieriger zu veranschaulichen, da es viele Möglichkeiten gibt, das Caching von einem Backend aus zu verwalten. Im obigen Konfigurationsbeispiel wird eine Kontrolle über die Kopfzeile "Uncacheable" hinzugefügt, die das Caching deaktiviert. Mit dieser Option kann jedes CMS einfach diese Kopfzeile auf die Antwort setzen, um das Caching dieser Anfrage zu deaktivieren.
Aus jedem PHP-Code und mit der obigen Konfiguration können Sie einfach eine HTTP-Anfrage senden und diesen Auszug verwenden, um den Cache zu löschen:
<?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);
}
?>