Wissensdatenbank

1 000 FAQs, 500 Anleitungen und erläuternde Videos. Hier gibt es nur Lösungen!

Varnish auf Cloud-Server verwenden

Aktualisierung 10.03.2026

Dieser Leitfaden stellt mehrere Beispiele für die Verwendung von Varnish auf einem Infomaniak Cloud-Server vor.

 

Vorwort

  • Konsultieren Sie diese zusätzlichen Ressourcen zur Varnish-Konfigurationssprache (VCL), um die Verarbeitung von Anfragen, das Routing und das Caching zu beherrschen:
  • Falls erforderlich, können lokal ansässige und von Infomaniak zertifizierte Partner diese Schritte übernehmen: starten Sie eine kostenlose Ausschreibung; sie kümmern sich um alles, sodass Sie von technischen Details entlastet werden — erfahren Sie auch mehr über die Rolle des Hosting-Anbieters.

 

Varnish-Konfiguration

Sobald installiert, basiert die Konfiguration von Varnish auf präzisen Regeln für das Caching und das Löschen. Stellen Sie sicher, dass der Zugriff eingeschränkt ist, um zu verhindern, dass nicht autorisierte Entitäten Ihren Cache leeren können.

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öschen über die CLI-Schnittstelle

Sobald Ihre Regeln aktiv sind, können Sie das Löschen Ihrer Website (z. B. "domain.xyz") mit dem Tool curl testen:

# Purge the homepage
$ curl -X PURGE https://domain.xyz/

# 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 spezifische URL zu löschen, ändern Sie einfach den Pfad der Anfrage:

# Purge a specific file
$ curl -X PURGE https://domain.xyz/some_path/some_file.html

# 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 das gruppierte Löschen von Bildern auszulösen, das im VCL definiert ist:

# Execute PURGEALL for images
$ curl -X PURGEALL https://domain.xyz/images

# 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>

 

Löschen von einem CMS (PHP)

Das Cache-Management kann auch dynamisch über Ihr Backend erfolgen. In der vorherigen Konfiguration haben wir eine Kontrolle über die Kopfzeile Uncacheable hinzugefügt. Ihr CMS kann diese Kopfzeile senden, um Varnish zu zwingen, eine Antwort nicht zu speichern.

So senden Sie eine programmatische Löschanfrage in PHP:

<?php
// Initialize cURL for a specific URL
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']}" // 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);
}
?>

War diese FAQ nützlich?