Wissensdatenbank
1 000 FAQs, 500 Anleitungen und erläuternde Videos. Hier gibt es nur Lösungen!
Varnish auf einem Cloud-Server verwenden
Dieser Leitfaden zeigt verschiedene Anwendungsbeispiele für Varnish auf dem Cloud Server von Infomaniak.
Einleitung
- Konsultieren Sie diese zusätzlichen Ressourcen zur Varnish-Konfigurationssprache (VCL), um die Verarbeitung von Anfragen, das Routing und das Caching zu beherrschen:
Varnish-Konfiguration
Nach der Installation basiert die Konfiguration von Varnish auf präzisen Regeln für das Caching und das Löschen von Cache-Inhalten. Achten Sie darauf, den Zugriff einzuschränken, um zu verhindern, dass nicht autorisierte Entitäten Ihren Cache leeren.
Hier ist ein Beispiel für eine Konfigurationsdatei, die die häufigsten Anwendungsfälle zusammenfasst:
vcl 4.0;
# Default backend configuration
backend default {
.host = "127.0.0.80"; # Backend IP address
.port = "80"; # Backend port
}
# Access Control List (ACL) for purge authorization
acl purge {
"localhost"; # Local access
"1.2.3.4"; # Trusted home IP
"42.42.42.0"/24; # Trusted company range
! "42.42.42.7"; # Specific IP exclusion (e.g., problematic user)
}
# Handle incoming requests
sub vcl_recv {
# Handle PURGE requests
if (req.method == "PURGE") {
# Check if client IP is authorized
if (!client.ip ~ purge) {
return (synth(405, "IP not authorized for PURGE requests."));
}
return (purge);
}
# Custom PURGEALL for image directory
if (req.method == "PURGEALL" && req.url == "/images") {
if (!client.ip ~ purge) {
return (synth(405, "IP not authorized for PURGEALL requests."));
}
# Invalidate all image-related objects in cache
ban("req.url ~ \.(jpg|png|gif|svg)$");
return (synth(200, "Images purged."));
}
# Bypass cache for authorized requests (e.g., admin panels)
if (req.http.Authorization) {
return (pass);
}
}
# Handle backend responses before caching
sub vcl_backend_response {
# Set TTL for images to 1 day
if (beresp.http.content-type ~ "image") {
set beresp.ttl = 1d;
}
# Respect backend's "uncacheable" instruction
if (beresp.http.uncacheable) {
set beresp.uncacheable = true;
}
}
Löschung über die Befehlszeilenschnittstelle
Sobald Ihre Regeln aktiv sind, können Sie die Löschung Ihrer Website (z. B. „domain.xyz“) mit dem Tool curl testen:
# Purge the homepage
$ curl -X PURGE {{URL_5}}
# Expected Varnish response
<!DOCTYPE html>
<html>
<head>
<title>200 Purged</title>
</head>
<body>
<h1>Success 200: Purge completed</h1>
<p>The page has been successfully purged.</p>
<h3>Guru Meditation:</h3>
<p>XID: 2</p>
<hr>
<p>Varnish Cache Server</p>
</body>
</html>Um eine bestimmte URL zu löschen, ändern Sie einfach den Pfad der Anfrage:
# Purge a specific file
$ curl -X PURGE {{URL_6}}
# Expected Varnish response
<!DOCTYPE html>
<html>
<head>
<title>200 Purged</title>
</head>
<body>
<h1>Success 200: Purge completed</h1>
<p>The file has been successfully purged.</p>
<h3>Guru Meditation:</h3>
<p>XID: 4</p>
<hr>
<p>Varnish Cache Server</p>
</body>
</html>Oder um die Massenlöschung der im VCL definierten Bilder auszulösen:
# Execute PURGEALL for images
$ curl -X PURGEALL {{URL_7}}
# Expected Varnish response
<!DOCTYPE html>
<html>
<head>
<title>200 Purged images</title>
</head>
<body>
<h1>Success 200: Images purged</h1>
<p>All images have been successfully purged.</p>
<h3>Guru Meditation:</h3>
<p>XID: 32770</p>
<hr>
<p>Varnish Cache Server</p>
</body>
</html>
Cache-Leeren über ein CMS (PHP)
Die Cache-Verwaltung kann auch dynamisch über Ihr Backend erfolgen. In der vorherigen Konfiguration wurde eine Prüfung des Headers Uncacheable hinzugefügt. Ihr CMS kann diesen Header senden, um Varnish zu zwingen, eine Antwort nicht zu speichern.
Hier erfahren Sie, wie Sie eine programmgesteuerte Bereinigungsanfrage in PHP senden:
<?php
// Initialize cURL for a specific URL
if ($curl = curl_init("{{URL_8}}")) {
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "PURGE",
CURLOPT_HTTPHEADER => [
"Host: {$_SERVER['HTTP_HOST']}" // Match the target host
]
]);
curl_exec($curl);
// Check if the purge was successful (HTTP 200)
if (curl_getinfo($curl, CURLINFO_HTTP_CODE) == 200) {
echo "Cache purged!";
}
curl_close($curl);
}
?>Link zu dieser FAQ: https://faq.infomaniak.com/2592
War diese FAQ nützlich?