1000 FAQ, 500 Anleitungen und Lernvideos. Hier gibt es nur Lösungen!
Varnish auf Cloud-Servern nutzen
Dieser Leitfaden präsentiert mehrere Beispiele für die Verwendung von Varnish auf Infomaniak Managed Cloud Server.
⚠️ Für zusätzliche Hilfe kontaktieren Sie einen Partner oder stellen Sie eine Angebotsanfrage — lesen Sie auch die Rolle des Hosters
Konfiguration von Varnish
So könnte eine grundlegende Konfigurationsdatei mit einigen gängigen Fällen und verschiedenen Aktionen/Regeln in einem einzigen Beispiel aussehen:
vcl 4.0;
# Dies sollte nicht geändert werden
backend default {
.host = "127.0.0.80";
.port = "80";
}
# Eine ACL (Zugriffskontrollliste) definiert eine Liste von IPs, die später in einer Regel wiederverwendet werden kann, z.B. "Wer kann den Cache löschen"
acl purge {
"localhost";
"1.2.3.4"; # Meine Heim-IP
"42.42.42.0"/24; # Ă–ffentlicher IP-Bereich meines Unternehmens
! "42.42.42.7"; # Außer einem lästigen Kollegen
}
# Ereignet sich, wenn Varnish die Anfrage zuerst erhält, bevor sie an das Backend gesendet wird
sub vcl_recv {
# Cache löschen erlauben
if (req.method == "PURGE") {
# Nicht von einer erlaubten IP? Dann mit einem Fehler beenden.
if (!client.ip ~ purge) { # purge ist die am Anfang definierte ACL
# 'synth' ist eine Funktion, die eine Seite zurĂĽckgibt (ohne das Backend zu befragen), die nicht gecacht wird.
return (synth(405, "Diese IP darf keine PURGE-Anfragen senden."));
}
# Wenn Sie diesen Schritt erreicht haben (und oben keinen Fehler verursacht haben), löschen Sie das gecachte Ergebnis
return (purge);
}
# Cache löschen aller Bilder ermöglichen, zum Beispiel
if (req.method == "PURGEALL" && req.url == "/images") {
if (!client.ip ~ purge) {
return (synth(405, "Diese IP darf keine PURGE-Anfragen senden."));
}
# Die 'ban'-Funktion ist eine integrierte Funktion, die alle Objekte im Cache ungĂĽltig macht, die dem gegebenen Ausdruck entsprechen
ban("req.url ~ \.(jpg|png|gif|svg)$");
return (synth(200, "Bilder gelöscht."));
}
# Seiten mit Autorisierung werden nicht gecacht
if (req.http.Authorization) {
# Mit der 'pass'-Aktion wird die Anfrage direkt vom Backend ohne Eintritt in den Cache ĂĽbergeben
return (pass);
}
}
# Ereignet sich, nachdem wir die Antwortheader vom Backend gelesen haben.
# Hier bereinigen Sie die Antwortheader, definieren, ob die Anfrage im Cache gespeichert werden muss, wie lange usw.
sub vcl_backend_response {
# Standardmäßig alle Bilder für 1 Tag cachen
if (beresp.http.content-type ~ "image") {
set beresp.ttl = 1d;
}
# Wenn der Server einen "uncacheable"-Header setzt, speichern Sie die Antwort nicht im Cache
if (beresp.http.uncacheable) {
set beresp.uncacheable = true;
}
}
Cache löschen über die CLI-Schnittstelle
Von hier aus funktionieren die Dinge so, wie in der VCL-Konfiguration festgelegten Regeln für alle Anfragen. Wenn die konfigurierte Website "domain.xyz" ist, können Sie einfach das CLI-Tool "curl" verwenden und folgendes tun:
$ curl -X PURGE https://domain.xyz/
Fehler 200 Cache gelöscht
Gelöscht
Guru-Meditation:
XID: 2
Varnish-Cache-Server
Und nun wurde die Startseite gelöscht. Oder um eine andere URL zu löschen, richten Sie die Anfrage einfach darauf:
$ curl -X PURGE https://domain.xyz/some_path/some_file.html
Fehler 200 Cache gelöscht
Gelöscht
Guru-Meditation:
XID: 4
Varnish-Cache-Server
Oder, wie in der VCL-Konfiguration angegeben, alle Bilder löschen:
$ curl -X PURGEALL https://domain.xyz/images
Fehler 200 Bilder gelöscht
Bilder gelöscht
Guru-Meditation:
XID: 32770
Varnish-Cache-Server
Cache löschen von einem CMS
Es ist etwas schwieriger, diesen Fall zu illustrieren, da es viele Möglichkeiten gibt, das Caching von einem Backend aus zu steuern. In obigem Konfigurationsbeispiel wird eine Kontrolle über den Header "Uncacheable" hinzugefügt, der das Caching deaktiviert. Mit dieser Option könnte jedes CMS einfach diesen Header auf die Antwort setzen, um das Caching dieser Anfrage zu deaktivieren.
Von jedem PHP-Code aus und mit der oben gezeigten Konfiguration können Sie einfach eine HTTP-Anfrage senden und diesen Ausschnitt verwenden, um einen Cache-Löschvorgang durchzuführen:
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 gelöscht!";
}
curl_close($curl);
}
Löschen über die CLI-Benutzeroberfläche
Von hier aus gelten die in der obigen Konfiguration festgelegten Regeln für alle Anfragen. Wenn die konfigurierte Website beispielsweise "domain.xyz" ist, können Sie einfach das CLI-Tool "curl" verwenden und folgendes tun:
$ curl -X PURGE https://domain.xyz/
Fehler 200 gelöscht
Gelöscht
Guru Meditation:
XID: 2
Varnish Cache Server
Und schon wurde die Startseite gelöscht. Oder um eine andere URL zu löschen, richten Sie die Anfrage einfach darauf:
$ curl -X PURGE https://domain.xyz/some_path/some_file.html
Fehler 200 gelöscht
Gelöscht
Guru Meditation:
XID: 4
Varnish Cache Server
Oder, wie in der VCL-Konfiguration angegeben, alle Bilder löschen:
$ curl -X PURGEALL https://domain.xyz/images
Fehler 200 Bilder gelöscht.
Bilder gelöscht.
Guru Meditation:
XID: 32770
Varnish Cache Server
Löschen aus einem CMS
Es ist etwas schwieriger, diesen Fall zu veranschaulichen, da es viele Möglichkeiten gibt, das Caching von einem Backend aus zu verwalten. Im obigen Konfigurationsbeispiel wird beispielsweise eine Überprüfung des Headers "Uncacheable" hinzugefügt, der das Caching deaktiviert. Mit dieser Option kann jedes CMS einfach diesen Header auf die Antwort setzen, um beispielsweise das Caching für diese Anfrage zu deaktivieren.
Von jedem PHP-Code und mit der obigen Konfiguration können Sie einfach eine HTTP-Anfrage senden und diesen Ausschnitt verwenden, um eine Cache-Löschung durchzuführen:
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 gelöscht!";
}
curl_close($curl);
}
Mehr erfahren
NĂĽtzliche Links zum Varnish Configuration Language (VCL) fĂĽr die Steuerung von Anforderungsverarbeitung, Routing, Caching und vielen anderen Aspekten: