Inhaltsverzeichnis

  • Warum Varnish deine Website transformiert
  • Lass uns starten: Das brauchst du
  • Fortgeschrittene VCL-Techniken für die Praxis
  • Ingress-Konfiguration für Domain-Routing
  • Monitoring und Debugging
  • Best Practices für optimales Caching
  • Varnish im Vergleich: Die richtige Caching-Strategie wählen
  • Häufig gestellte Fragen (FAQ)
  • Wie kann ich überprüfen, ob eine Seite aus dem Varnish-Cache geladen wird?
  • Fazit

Über den Autor

Ja, Varnish Cache ist eine Software mit faszinierenden Eigenschaften und wird weltweit von großen Internetseiten genutzt.
Zuletzt geändert:28.07.2025

KubernetesVarnishEntwicklung

28.07.2025

Blitzschneller Cache für deine Kubernetes-AnwendungVarnish - der geheime Held der Website Geschwindigkeit mit Kubernetes

Varnish ist ein spezieller HTTP-Cache. Er sitzt vor deiner Webanwendung und speichert fertige Seiten, damit Anfragen blitzschnell direkt aus dem Speicher beantwortet werden können. So wird dein Backend entlastet und deine Seite spürbar schneller, gerade in Kubernetes-Setups ein großer Vorteil.

Varnish Kubernetes

Warum Varnish deine Website transformiert

Performance ist alles im Web. Wenn deine Nutzer warten müssen, springen sie ab. Varnish löst dieses Problem elegant: Als HTTP-Cache sitzt er vor deiner Anwendung und liefert Inhalte blitzschnell aus dem Speicher aus. Das Ergebnis? Bis zu 90% weniger Last auf dein Backend und deutlich schnellere Ladezeiten.

Lass uns starten: Das brauchst du

Bevor wir loslegen, hier kurz die vier Dateien, die du für ein einfaches Setup benötigst:

  • default.vcl: deine Varnish-Konfiguration
  • Dockerfile: damit baust du dein Varnish-Image inklusive VCL
  • varnish.yaml: Deployment und Service für Kubernetes
  • Ingress.yaml: optional, damit deine Website über einen Domainnamen erreichbar wird

Die VCL Datei verstehen und anpassen

Schauen wir uns erstmal die einzelnen Teile der default.vcl genauer an:

backend default {
    .host = "website-svc";
    .port = "3001";
    .first_byte_timeout = 300s;
}

Der erste Block legt dein Backend fest. website-svc ist dabei der Name des Kubernetes-Services, auf den Varnish zugreift. Der Port 3001 ist der Port deiner Anwendung (zum Beispiel Django), der innerhalb des Clusters erreichbar ist. Mit first_byte_timeout stellst du ein, wie lange Varnish auf die erste Antwort vom Backend wartet.

sub vcl_recv {
    if (req.method == "GET" && req.http.Cookie !~ "sessionid") {
        unset req.http.Cookie;
    }
}

vcl_recv wird bei jeder eingehenden Anfrage aufgerufen. Hier wird entschieden, ob Cookies entfernt werden. In diesem Fall entfernt Varnish alle Cookies von GET-Requests, die nicht sessionid enthalten. Das macht Caching effektiver, weil verschiedene Cookie-Werte sonst unterschiedliche Cache-Objekte erzeugen würden.

sub vcl_backend_response {
    if (bereq.url ~ "^/de-de/aktuelles/.*") {
        set beresp.ttl = 2h;
    } else {
        set beresp.ttl = 12h;
    }
}

vcl_backend_response wird aufgerufen, wenn Varnish das Backend befragt hat und die Antwort verarbeitet. Hier legst du fest, wie lange Varnish den Inhalt cachen soll. Nachrichten-Seiten bekommen hier zum Beispiel nur 2 Stunden, alles andere bleibt 12 Stunden im Cache.

Fortgeschrittene VCL-Techniken für die Praxis

Grace Mode & Saint Mode (Backend-Ausfall überbrücken):
Mit Grace und Saint Mode kannst du veraltete Inhalte ausliefern, wenn das Backend nicht erreichbar ist. Das erhöht die Ausfallsicherheit enorm.

sub vcl_backend_fetch {
    if (beresp.status == 500 || beresp.status == 503) {
        set beresp.saintmode = 5m; // Markiere Backend für 5 Min. als "krank"
        return (abandon);
    }
    set beresp.grace = 2h; // Erlaube, diesen Inhalt 2h über seine TTL hinaus zu servieren
}

Cache-Keys anpassen:
Manipuliere den Cache-Key, um z.B. unwichtige Query-Parameter zu ignorieren und so die Hit-Rate zu erhöhen.

sub vcl_hash {
    // Nur 'id' und 'lang' für den Cache-Key berücksichtigen
    if (req.url ~ "\?") {
        set req.hash += regsuball(req.url, "^.*\?((?:id|lang)=[^&]+).*$", "\1");
    }
    // ...
}

Sicheres Purging via API:
Richte einen sicheren HTTP-Endpoint zum gezielten Leeren des Caches ein.

acl purge {
    "localhost";
    "192.168.1.0"/24; // Erlaube Purging nur aus diesem Netz
}

sub vcl_recv {
    if (req.method == "PURGE") {
        if (!client.ip ~ purge) {
            return (synth(405, "Not allowed."));
        }
        return (hash);
    }
}

Dockerfile: VCL ins Image legen

FROM varnish:stable
COPY default.vcl /etc/varnish/

So stellst du sicher, dass deine VCL immer direkt im Container liegt. Dein Image baust du anschließend mit:

docker build -t varnish:latest .

Deployment und Service definieren

Das Deployment sorgt dafür, dass dein Varnish-Pod dauerhaft läuft und Kubernetes ihn automatisch neu startet, wenn er abstürzt. In unserem Beispiel läuft nur eine Instanz (replicas: 1), für Produktionsumgebungen kannst du hier aber auch mehrere Replikas eintragen.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: varnish
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: varnish
    spec:
      containers:
      - name: varnish
        image: varnish:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: varnish
spec:
  selector:
    app: varnish
  ports:
    - port: 80
      targetPort: 80

Der zugehörige Service macht deinen Pod im Cluster erreichbar. Er verbindet den Ingress oder andere Pods mit deinem Varnish-Container. Wichtig ist dabei, dass targetPort und containerPort zusammenpassen.

Super! Damit ist nun dein Pod im Cluster erreichbar.

Ingress-Konfiguration für Domain-Routing

Der Ingress ist das letzte Glied in der Kette. Er sorgt dafür, dass Anfragen aus dem Internet in deinen Cluster gelangen und dort an den richtigen Service, also deinen Varnish, weitergeleitet werden. Dadurch kannst du Domains und TLS-Zertifikate zentral verwalten.

Ein einfaches Beispiel sieht so aus:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: varnish-ingress
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  ingressClassName: nginx
  rules:
  - host: "example.com"
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: varnish
            port:
              number: 80

Achte darauf, dass der Name des Services und der Port exakt zu deinem vorher definierten Service passen. So wird der komplette Webtraffic durch Varnish geschleust und deine Anwendung profitiert vom Cache.

Monitoring und Debugging

Hier noch ein paar praktische Befehle, um deinen Cache und den Varnish-Server zu überwachen und besser zu steuern:

varnishstat

Zeigt live Cache-Statistiken, zum Beispiel Hits und Misses.

varnishlog

Zeigt genau, warum Requests gecacht wurden oder nicht.

varnishadm ban "req.url ~ .*"

Damit leerst du gezielt den Cache und erzwingst neue Inhalte.

varnishadm ping

Prüft, ob dein Varnish-Admin erreichbar ist.

varnishadm status

Zeigt den aktuellen Status deines Varnish-Prozesses.

Best Practices für optimales Caching

1. Cache-Strategien definieren

  • Statische Inhalte länger cachen (CSS, JS, Bilder)
  • Dynamische Inhalte kürzer cachen
  • Session-basierte Inhalte individuell behandeln

2. Performance-Monitoring einrichten

  • Regelmäßig Cache-Hit-Rate überprüfen
  • Speicherauslastung im Blick behalten
  • Backend-Gesundheit überwachen

3. Cache-Invalidierung planen

  • Automatisierte Prozesse für Content-Updates
  • Gezielte Invalidierung statt komplettes Leeren
  • Health-Checks für Backend-Server

Varnish im Vergleich: Die richtige Caching-Strategie wählen

Varnish ist extrem mächtig, aber nicht immer die einzige Lösung. Wie schlägt es sich im Vergleich zu anderen Caching-Mechanismen?

Caching-LösungStärkenSchwächenOptimal für...
Varnish CacheMaximale Flexibilität durch VCL; Caching von ganzen HTTP-Objekten; Features wie Grace/Saint Mode.Höhere Komplexität als einfache Caches; kein nativer TLS-Support (benötigt einen Proxy davor)....komplexe Websites (z.B. E-Commerce, News-Portale) mit dynamischen Inhalten, die eine feingranulare Cache-Steuerung benötigen.
Nginx CachingEinfache Konfiguration; direkt im Webserver integriert; sehr performant; kann TLS terminieren.Weniger flexible Cache-Logik als Varnish; primär für statische Assets und einfache Responses....einfachere Websites und Anwendungen, bei denen ein unkomplizierter Cache für statische Dateien und API-Antworten ausreicht.
CDN (z.B. Cloudflare)Global verteilt (geringe Latenz weltweit); Schutz vor DDoS-Angriffen; einfaches Setup.Kostenintensiver; weniger Kontrolle über die Cache-Invalidierung; "Blackbox"....global agierende Websites, die von einem verteilten Cache und zusätzlichen Sicherheitsfeatures profitieren wollen.

Häufig gestellte Fragen (FAQ)

Wie kann ich überprüfen, ob eine Seite aus dem Varnish-Cache geladen wird?

Überprüfe die HTTP-Header der Antwort in den Entwicklertools deines Browsers. Varnish fügt typischerweise Header wie X-Varnish (interne Transaktions-ID) und Age (wie lange das Objekt im Cache liegt) hinzu. Ein Age-Wert größer als 0 ist ein sicheres Zeichen für einen Cache-Hit.

Warum ist meine Cache-Hit-Rate niedrig?

Die häufigsten Gründe sind:

  1. Cookies: Varnish cacht standardmäßig keine Anfragen mit Cookies. Passe deine vcl_recv an, um unnötige Cookies zu entfernen.
  2. Set-Cookie-Header vom Backend: Wenn dein Backend einen Set-Cookie-Header sendet, wird die Antwort nicht gecacht.
  3. Cache-Control-Header: Achte auf Cache-Control: private oder max-age=0 vom Backend.

Wie schütze ich den Varnish-Admin-Port in Kubernetes?

Der Admin-Port sollte niemals extern erreichbar sein. Stelle sicher, dass dein Kubernetes-Service für Varnish nur den HTTP-Port (z.B. 80) freigibt. Der Zugriff auf varnishadm sollte nur über kubectl exec in den Pod erfolgen.

Wie viel RAM bzw. Speicher brauche ich für Varnish?

Das hängt stark von deinem Usage‑Profil ab. Empfohlen wird eine RAM‑Konfiguration zwischen 1 GB und 16 GB, kombiniert mit SSD‑Speicher.

Kann Varnish auch ohne Query‑Parameter cachen?

Ja, du kannst Query‑Parameter entfernen (z. B. per RegEx in VCL), um nur ein Objekt zu cachen:

sub vcl_recv {
  set req.url = regsub(req.url, "\?.*", "");
}

Wie lassen sich benutzerdefinierte Fehlerseiten konfigurieren?

Über vcl_error kannst du eigene HTML‑Seiten mit einer synthetischen Antwort erstellen. Beispiel:

sub vcl_error {
  set obj.http.Content-Type = "text/html; charset=utf-8";
  synthetic {"…"};
  deliver;
}

Fazit

Damit bist du jetzt komplett durch. Dein Setup von default.vcl bis zum Ingress steht und Varnish sorgt jetzt dafür, dass deine Seite deutlich schneller lädt. Mit der richtigen Konfiguration wird Varnish zum geheimen Helden deiner Website-Performance.

Mehr über Varnish erfahren

Hast du noch Fragen oder eine Meinung? Mit deinem GitHub Account kannst Du es uns wissen lassen...


Was unsere Kunden über uns sagen

/img/homepage/testimonial_bg.svg
Ofa Bamberg GmbHRainer Kliewe
Ludwig-Maximilians-Universität MünchenProf. Dr. Mario Haim
Deutsches MuseumGeorg Hohmann
Fonds Finanz Maklerservice GmbHNorbert Porazik
Technische Universität HamburgSören Schütt-Sayed
  • Ofa Bamberg GmbH
    Ofa Bamberg GmbH
    B2B Online-Shop | B2C Website | Hosting | Betreuung | Security
    Rainer Kliewe
    © Ofa Bamberg GmbH
    Blueshoe betreut uns und unsere Webapplikationen seit vielen Jahren. Vom Online-Shop bis hin zu großen Teilen unseres Web-Umfelds hat sich das Unternehmen stets kompetent, verlässlich und vorausschauend gezeigt. Wir sind sehr zufrieden mit Blueshoe als Partner.
    Rainer KlieweGeschäftsführer
  • Ludwig-Maximilians-Universität München
    Ludwig-Maximilians-Universität München
    Plattformentwicklung | Hosting | Betreuung | APIs | Website
    Prof. Dr. Mario Haim
    Blueshoe hat unsere Forschungsdatenplattform Munich Media Monitoring (M3) entwickelt und uns hervorragend dabei beraten. Das Team hat unsere Anforderungen genau verstanden und sich aktiv in die Ausgestaltung der Software und der Betriebsumgebung eingebracht. Wir sind froh, dass auch Wartung und weiterführender Support in Blueshoes Händen liegen.
    Prof. Dr. Mario HaimLehrstuhlinhaber, Institut für Kommunikationswissenschaft und Medienforschung
  • Deutsches Museum
    Deutsches Museum
    Digitalisierung | Beratung | Datenbank-Optimierung | GraphQL | CMS
    Georg Hohmann
    Foto: Anne Göttlicher
    Im Rahmen eines komplexen Digitalisierungsprojekts für unsere Exponate-Datenbank war Blueshoe ein äußerst verlässlicher Partner. Sie haben uns nicht nur während des gesamten Projekts hervorragend beraten, sondern unsere Anforderungen perfekt umgesetzt. Dank ihrer Arbeit ist unsere Datenbank nun ein bedeutender Mehrwert für die weltweite wissenschaftliche Forschung.
    Georg HohmannLeiter Deutsches Museum Digital
  • Fonds Finanz Maklerservice GmbH
    Fonds Finanz Maklerservice GmbH
    Plattformentwicklung | Prozess-Systeme | Hosting | Betreuung | Zertifikate | Website
    Norbert Porazik
    © Fonds Finanz Maklerservice GmbH
    Blueshoe ist unsere verlängerte Werkbank für Entwicklung, Wartung und Support unserer Weiterbildungs- und Zertifizierungsplattformen. Das Team hat sich gründlich in unsere Abläufe eingearbeitet, und wir freuen uns, Blueshoe als zuverlässigen Partner an unserer Seite zu haben.
    Norbert PorazikGründer und Geschäftsführer
  • Technische Universität Hamburg
    Technische Universität Hamburg
    Plattformentwicklung | Beratung | Prozess-Systeme | Hosting | Website
    Sören Schütt-Sayed
    Seit 2019 unterstützt uns die Blueshoe GmbH tatkräftig bei der Entwicklung und Weiterentwicklung des "Digital Learning Lab" und der "Digital Learning Tools". Dank ihrer Beratung konnten wir von Anfang an auf eine zukunftssichere, moderne technische Struktur setzen. Die Zusammenarbeit ist reibungslos, und wir fühlen uns rundum gut betreut. Und davon profitieren dann auch die Lehrkräfte in Hamburg.
    Sören Schütt-SayedOberingenieur