In der Welt der Web-Performance-Optimierung kommt es auf Geschwindigkeit an. Die Nutzer erwarten, dass Websites innerhalb eines Wimpernschlags geladen werden, und Suchmaschinen bevorzugen schnell ladende Websites. Hier kommt Varnish ins Spiel – ein leistungsstarker HTTP-Beschleuniger, der die Geschwindigkeit und Skalierbarkeit von Websites drastisch erhöht. Aber was genau ist Varnish, und wie kann es helfen, Ihre HTTP-Leistung zu verbessern?

Was ist Varnish?

Varnish (auch bekannt als Varnish Cache) ist ein Hochleistungs-Webanwendungsbeschleuniger, der oft auch als Reverse-Proxy-Caching-Server bezeichnet wird. Er sitzt zwischen Ihren Benutzern und Ihrem Webserver und speichert Kopien von HTTP-Antworten (wie HTML-Seiten, Bilder oder Skripte), so dass wiederholte Anfragen viel schneller bedient werden können.

Im Gegensatz zu herkömmlichen Webservern wie Apache oder NGINX ist Varnish speziell für das Caching und die schnelle Bereitstellung von Inhalten konzipiert. Es wird häufig von Websites mit hohem Datenverkehr, Medienunternehmen und E-Commerce-Plattformen verwendet, die eine blitzschnelle Bereitstellung von Inhalten benötigen.

Wie funktioniert Varnish?

Varnish arbeitet mit der Zwischenspeicherung von HTTP-Antworten im Speicher. Wenn ein Benutzer eine Seite anfordert:

  1. Erstmalige Anforderung: Varnish leitet die Anfrage an den Backend-Server (z. B. Apache oder NGINX) weiter.

  2. Das Backend generiert die Antwort und sendet sie an Varnish.

  3. Varnish speichert (cached) die Antwort im Speicher.

  4. Varnish liefert diese Antwort dann an den Benutzer.

  5. Nachfolgende Anfragen nach demselben Inhalt werden direkt aus dem Cache bedient, wobei das Backend vollständig umgangen wird.

Dadurch wird die Serverlast verringert und die Bereitstellung von Inhalten erheblich beschleunigt.

Die wichtigsten Vorteile der Verwendung von Varnish

  • Verbesserte Ladezeiten: Varnish stellt zwischengespeicherte Seiten in Millisekunden bereit, was die Ladegeschwindigkeit der Seiten erheblich verbessert.

  • Geringere Backend-Belastung: Da Varnish einen großen Teil des Datenverkehrs über den Cache abwickelt, können Ihre Webserver komplexere, dynamische Anfragen bearbeiten.

  • Hohe Skalierbarkeit: Varnish ist darauf ausgelegt, Tausende von Anfragen pro Sekunde zu verarbeiten und eignet sich daher ideal für Websites mit hohem Datenverkehr.

  • Flexible Konfiguration: Mit der integrierten Varnish Configuration Language (VCL) können Sie genau festlegen, wie Inhalte zwischengespeichert, gelöscht oder ausgeliefert werden.

  • Bessere Benutzerfreundlichkeit: Schnellere Seitenladezeiten bedeuten zufriedenere Benutzer und niedrigere Absprungraten.

Wie man Varnish zur Verbesserung der HTTP-Leistung einsetzt

Hier finden Sie einen vereinfachten Ansatz für den Einstieg in die Nutzung von Varnish:

1. Varnish installieren

Varnish kann auf den meisten Linux-Distributionen über den Paketmanager installiert werden. Zum Beispiel:

sudo apt install varnish # Debian/Ubuntu
sudo yum install varnish # CentOS/RHEL

2. Varnish konfigurieren

Sie müssen Varnish auf Ihren Backend-Server verweisen und Caching-Regeln in einer VCL-Datei definieren, die sich normalerweise unter /etc/varnish/default.vcl befindet.

Beispiel Ausschnitt:

backend default {
.host = "127.0.0.1";
.port = "8080";
}

Damit wird Varnish angewiesen, Anfragen an Ihren Webserver weiterzuleiten, der auf Port 8080 läuft.

3. Port-Konfiguration aktualisieren

Standardmäßig lauscht Varnish auf Port 6081, einem Nicht-Standard-Port für HTTP-Verkehr. In Produktionsumgebungen ist es üblich, Varnish so zu konfigurieren, dass es auf Port 80 lauscht, dem Standard-HTTP-Port, und Ihren Webserver (wie Apache oder Nginx) so anzupassen, dass er einen anderen Port verwendet, normalerweise 8080. Dadurch kann Varnish eingehende HTTP-Anfragen auf Port 80 verarbeiten, den Inhalt zwischenspeichern und Anfragen an den Webserver auf Port 8080 weiterleiten.

Beispiel:

  1. Varnish-Listening-Port ändern
    Öffnen Sie die Varnish-Konfigurationsdatei, die Sie normalerweise unter /etc/varnish/default.vcl finden, und setzen Sie den Listening Port auf 80:

    # /etc/varnish/default.vcl

    # Auf Port 80 (HTTP-Standardport) lauschen
    backend default {
    .host = “127.0.0.1”;
    .port = “8080”; # Ihr Webserver wird auf Port 8080 lauschen
    }

  2. Webserver (Apache/Nginx) auf Port 8080 konfigurieren
    Wenn Sie Apache verwenden, können Sie die Listen-Direktive in /etc/apache2/ports.conf so ändern, dass er auf Port 8080 lauscht:

    Listen 8080

    Bei Nginx passen Sie den Server-Block so an, dass er auf Port 8080 lauscht:

    server {
    listen 8080;
    server_name example.com;
    # Andere Konfigurationen
    }
  3. Varnish und Webserver neu starten
    Nachdem Sie diese Änderungen vorgenommen haben, starten Sie Varnish und Ihren Webserver neu, damit die neuen Konfigurationen übernommen werden:

    sudo systemctl restart varnish
    sudo systemctl restart apache2 # Oder nginx

Nun wird Varnish eingehende Anfragen an Port 80 bearbeiten und sie an Ihren Webserver an Port 8080 weiterleiten, wo der Inhalt generiert und bereitgestellt wird.

4. Anpassen des Caching-Verhaltens

Varnish ermöglicht es Ihnen, die Art und Weise, wie Inhalte zwischengespeichert werden, mithilfe der Varnish Configuration Language (VCL) anzupassen. Die VCL ermöglicht eine fein abgestufte Kontrolle über das Caching-Verhalten, einschließlich des Ausschlusses bestimmter Inhalte vom Caching, der Behandlung von Cookies und der Festlegung von Löschregeln.

Beispiel 1: Ausschluss von Inhalten aus dem Cache

Sie können bestimmte Seiten oder Ressourcen vom Caching ausschließen, indem Sie Bedingungen in Ihrer VCL-Datei verwenden. So können Sie zum Beispiel das Caching von dynamischen Seiten oder sensiblen Benutzerdaten wie Einkaufswagen oder Benutzerprofilen vermeiden.

sub vcl_recv {
if (req.url ~ "^/cart" || req.url ~ "^/user-profile") {
return (pass); # Caching für Warenkorb- oder Profilseiten überspringen
}
}

In diesem Beispiel:

  • Seiten mit URLs, die /cart oder /user-profile enthalten, werden nicht gecached und werden direkt an den Backend-Server zur dynamischen Generierung übergeben.

Beispiel 2: Cache-Inhalte mit bestimmten Cookies

Sie können Inhalte auf der Grundlage bestimmter Cookies zwischenspeichern, was für die Personalisierung von Inhalten nützlich ist. Wenn Sie beispielsweise nur Inhalte für angemeldete Benutzer mit einem bestimmten Cookie zwischenspeichern möchten, können Sie die Zwischenspeicherlogik wie folgt ändern:

sub vcl_recv {
if (req.http.Cookie ~ "session_id") {
return (hash); # Cache nur für eingeloggte Benutzer
}
}

Dieses Beispiel:

  • Überprüft, ob die Anfrage ein session_id-Cookie enthält. Wenn es vorhanden ist, wird Varnish den Inhalt für eingeloggte Benutzer zwischenspeichern und den Zwischenspeicher für Benutzer ohne Cookie ignorieren.

Beispiel 3: Bereinigungsregeln festlegen

Möglicherweise möchten Sie bestimmte zwischengespeicherte Inhalte löschen, wenn sie veraltet sind (z. B. wenn ein Artikel aktualisiert wird). Dies kann mit dem Befehl purge geschehen.

sub vcl_hit {
if (obj.status == 200 && req.url ~ "/news/") {
# Zwischengespeicherten News-Artikel löschen, nachdem er aktualisiert wurde
return (bereinigen);
}
}

Dieses Beispiel:

  • Löscht den zwischengespeicherten Inhalt eines Nachrichtenartikels, wenn er aktualisiert wird, damit die Benutzer immer die neueste Version sehen.

5. Überwachen und Optimieren

Um sicherzustellen, dass Varnish optimal funktioniert, ist es wichtig, seine Leistung regelmäßig zu überwachen und die Cache-Trefferraten zu analysieren. Varnish bietet verschiedene Tools wie varnishstat, varnishlog und die Varnish Administration Console (VAC) zur Leistungsüberwachung.

Beispiel 1: Verwendung von varnishstat für Metriken

varnishlog liefert wichtige Metriken für die Analyse der Leistung von Varnish, wie Cache-Trefferraten, Speichernutzung und Backend-Antwortzeiten. Sie können damit überwachen, wie gut Ihre Caching-Konfiguration funktioniert.

varnishstat

Dieser Befehl zeigt Ihnen verschiedene Statistiken an, darunter:

  • cache_hit: Die Anzahl der Cache-Treffer (Anfragen, die aus dem Cache bedient wurden).

  • cache_miss: Die Anzahl der Cache-Misses (an das Backend weitergeleitete Anfragen).

  • backend_conn: Die Anzahl der Verbindungen zum Backend-Server.

Anhand dieser Metriken können Sie beurteilen, wie effektiv Ihre Caching-Strategie ist, und sie bei Bedarf anpassen, um die Leistung zu verbessern.

Beispiel 2: Verwendung von varnishlog für detaillierte Protokollierung

varnishlog liefert detaillierte Protokolle zu jeder Anfrage und ihrer Interaktion mit Varnish. Dies ist nützlich für die Fehlersuche und das Verständnis, warum bestimmte Anfragen aus dem Cache bedient oder an das Backend weitergeleitet werden.

varnishlog

Mit diesem Befehl erhalten Sie detaillierte Protokolle, die zeigen:

  • Ob Anfragen aus dem Cache bedient oder an das Backend weitergeleitet wurden.

  • Cache-Treffer oder Fehlversuche für bestimmte Ressourcen.

  • Bereinigungsereignisse und andere Interaktionen mit dem Cache.

Beispiel 3: Verwendung der Varnish-Administrationskonsole (VAC)

Die Varnish Administration Console (VAC) ist eine webbasierte Schnittstelle, die Sie bei der Verwaltung und Überwachung Ihrer Varnish-Instanz unterstützt. VAC bietet Echtzeit-Statistiken, Protokolldaten und Cache-Informationen in einer benutzerfreundlichen grafischen Oberfläche.

  • Sie können auf die VAC zugreifen, indem Sie zu http://your_server_ip:6082 (Standardport für VAC) navigieren.

  • Verwenden Sie VAC, um die Cache-Leistung zu verfolgen, Ihren VCL-Code zu optimieren und Ihre Caching-Strategie auf der Grundlage der angezeigten Metriken fein abzustimmen.

Anwendungsfälle für Varnish

  • Medien-Websites: Bereitstellung von statischen Inhalten wie Bildern oder Nachrichtenartikeln mit hoher Geschwindigkeit.

  • E-Commerce-Plattformen: Beschleunigung von Produktauflistungen oder Kategorieseiten.

  • Nachrichten und Veröffentlichungen: Bewältigung von Verkehrsspitzen bei Eilmeldungen.

  • API-Beschleunigung: Zwischenspeichern von leseschweren API-Endpunkten, um die Backend-Last zu verringern.

Fazit

Varnish ist eine leistungsstarke Lösung für jede Web-Infrastruktur, die hohe Leistung und Skalierbarkeit erfordert. Durch die Entlastung des Backends von wiederholten HTTP-Anfragen und die blitzschnelle Bereitstellung von zwischengespeicherten Inhalten trägt Varnish dazu bei, die Seitengeschwindigkeit zu verbessern, die Serverbelastung zu verringern und die Benutzerfreundlichkeit zu erhöhen.

Wenn Ihre Website ein hohes Verkehrsaufkommen bewältigt oder Sie einfach eine bessere Leistung und Zuverlässigkeit anstreben, ist die Integration von Varnish in Ihren Stack ein strategischer Schritt nach vorn.