Varnish auf Rootservern installieren

|
Dynamische Lichtspuren in Großstadt-Kulisse

Wie wichtig eine geringe „Time to first byte“ (TTFB) ist, muss vermutlich jeder Webseitenbetreiber mindestens einmal am eigenen Leib erfahren. Umso komplexer und frequentierter die eigene Webseite ist, desto schwieriger wird es, eine gute Performance zu erreichen.

Bessere Ladezeiten (TTFB) dank Varnish Cache

Um die Ladezeiten der Webseite durchgehend gering zu halten und den eigenen Server zu entlasten, wird gerne ein sog. „Reverse Proxy“ verwendet. Dabei handelt es sich um einen eigenständigen Server, welcher vor den eigentlichen Webserver (das Backend) geschaltet wird und die Anfragen der Besucher beantwortet. Er speichert die angeforderten Inhalte in seinem Cache und beantwortet wiederkehrende Anfragen selbstständig, ohne eine erneute Kommunikation mit dem Backend aufzubauen. Eine sehr beliebte Software für Reverse Proxys ist „Varnish Cache“. Das Alleinstellungsmerkmal von Varnish ist, dass die freie Software als Webbeschleuniger designt und weiterentwickelt wurde. Um Varnish Cache zu nutzen, werden Root-Rechte auf einem UNIX-Betriebssystem mit installiertem Webserver – zum Beispiel NGINX oder Apache – vorausgesetzt.

Varnish Cache für Onlineshops
Mann sitzt mit Kreditkarte und Smartphone vorm Laptop

Der E-Commerce-Gigant Amazon hat schon 2012 errechnet, dass eine Ladezeit, die länger als 100 Millisekunden beträgt, den Umsatz um etwa 1% reduziert. Der Tagesumsatz von Amazon.com liegt bei ca. 67 Millionen Dollar. Das entspräche entgangenen Opportunitätskosten von 670.000 Dollar am Tag, die sich im Jahr auf 244,5 Millionen Dollar summieren würden.

Die Funktionsweise von Varnish Cache

Varnish Cache ist ein Webbeschleuniger bzw. „HTTP reverse proxy“. Der Varnish Proxy wird direkt vor den Webserver geschaltet, welcher die Inhalte der Webseite ausliefert.

Varnish Software
Logo Varnish Software

Ruft ein Nutzer die Webseite auf, prüft Varnish zunächst, ob er die angeforderten Inhalte bereits in seinem Cache finden kann. Sollten die Inhalte nicht im Cache vorliegen, werden Selbige vom Backend (dem Webserver) angefragt, über die virtuelle Speicherverwaltung abgelegt und an den Besucher ausgeliefert. Varnish legt grundsätzlich alle Anfragen im virtuellen Speicher ab und überlässt dadurch dem Betriebssystem die Entscheidung, welche Inhalte auf der Festplatte und welche im Arbeitsspeicher (RAM) gespeichert werden. Auf diese Weise wird verhindert, dass Daten vom Betriebssystem zwischengespeichert werden, während Varnish Selbige auf die Festplatte schreibt.

Die Varnish Software selbst arbeitet thread-basiert. Dabei wird jede eingehende Verbindung als ein eigener Arbeitsthread behandelt und alle Threads werden bis zum konfigurierten Limit zeitgleich abgearbeitet. Ist das Limit erreicht, werden neue Threads in eine Warteschlange gestellt und erst, wenn das eingestellte Limit der Warteschlange erreicht ist, werden weitere Verbindungen abgelehnt.

Varnish unterstützt außerdem eine Lastverteilung á la „Round Robin“ sowie eine zufällige Verteilung, jeweils mit einer eigenen Gewichtung der Backends. Zusätzlich ist Varnish in der Lage, sog. „health-checks“ der Backends durchzuführen. Dabei wird überprüft, ob der Backendserver noch in der Lage ist, Webseiten auszuliefern. Sollte das Backend nicht erreichbar sein spricht Varnish den betreffenden Webserver automatisch nicht mehr an.

Der Varnish Cache Server wird mittels „Varnish Configuration Language“ (VCL) konfiguriert. Dabei handelt es sich um eine anwendungsspezifische Sprache, die es ermöglicht, an wichtigen Stellen der Anfragebehandlung Schnittstellen zu erstellen und dadurch Code einzuschleusen. Wird ein VCL-Skript geladen, übersetzt die Software es in C, kompiliert es als Programmbibliothek und linkt es direkt in den Varnish.

Varnish Cache für Pagespeed
Dynamische Lichtspuren auf der Autobahn

Varnish Cache Server? Klingt kompliziert. Lohnt sich der Aufwand?

Eine Optimierung der eigenen Anwendung mittels Varnish Cache ist in vielen Fällen die beste Möglichkeit, um einem großen Besucherandrang sowie der steigenden Komplexität der eigenen Webseite entgegenzutreten. Die einzig wirkliche Hürde stellt dabei die Konfiguration des Varnish mittels VCL dar. Um eine VCL für seine Webseite zu erstellen, benötigt man entweder entsprechendes Know-How oder die Lust, Neues zu lernen sowie viel Zeit und Sitzfleisch.

Da Varnish nicht in der Lage ist, SSL- bzw. TLS-Verbindungen aufzubauen, benötigt man außerdem einen Proxy, der das SSL-Offloading übernimmt, wenn man seine Webseite verschlüsselt ausliefern möchte.

Wurde diese Hürde gemeistert und der Varnish Cache ist erfolgreich eingerichtet, erreicht die eigene Anwendung Ladezeiten, die mit den gängigen Caching-Methoden nicht möglich sind. Die spürbar verringerte Ladezeit verbessert das Surferlebnis der Besucher massiv und wirkt sich sehr positiv auf das Ranking in Suchmaschinen aus.

Aus diesen Gründen ist Varnish vor allem im E-Commerce-Hosting sehr beliebt.

Neben der Möglichkeit, Varnish selbst auf einem Server aufzusetzen, gibt es außerdem verschiedene Managed Varnish Anbieter im Netz, die einen Varnish Proxy für Euch aufsetzen und sich um die Technik kümmern.

Melde dich zum Newsletter an!

Kommende Releases, neue Features und Tipps rund um dein Hosting − wir bringen dir das Wichtigste in dein Postfach. Abonniere unseren Newsletter und bleib auf dem Laufenden.

Wir würden dich gerne persönlich ansprechen:

Varnish auf einem Rootserver installieren

Wir installieren uns jetzt Varnish Cache auf einem vRoot L bei Mittwald, um damit Webseiten auszuliefern, die auf unserem Managed vServer L liegen. Als Betriebssystem unseres vRoots nutzen wir Ubuntu 16.04 LTS und als Webserver für das SSL-Offloading kommt Apache zum Einsatz. Zusätzlich installieren wir einen Certbot, der uns Let’s Encrypt Zertifikate ausstellt, damit unsere Webseiten verschlüsselt ausgeliefert werden. Voraussetzung für die Ausstellung eines LE-Zertifikates ist, dass eine Domain per A-Record auf den Rootserver zeigt. 

Varnish installieren: Auf „los“ geht’s los. LOS!

1. Zunächst gehen wir sicher, dass unser Server auf einem aktuellen Stand ist:

sudo apt update && sudo apt upgrade -y

2. Dann installieren wir alle benötigten Binaries:

sudo apt install software-properties-common apt-transport-https -y

3. Jetzt installieren wir unseren Apache:

sudo apt install apache2 -y
sudo systemctl status apache2

4. Dann noch die benötigten Apache2 Module installieren:

sudo a2enmod headers && \
sudo a2enmod xml2enc && \
sudo a2enmod proxy && \
sudo a2enmod proxy_http && \
sudo a2enmod proxy_html && \
sudo a2enmod proxy_balancer && \
sudo a2enmod lbmethod_byrequests && \
sudo systemctl restart apache2

5. Jetzt erstellen wir einen vHost für unsere Domain.

export DOMAIN=EURE_DOMAIN && \    
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/${DOMAIN}.conf

6. Dann tragen wir unsere Domain in den vHost ein:

sudo sed -i "s#.*</VirtualHost>.*#ServerName ${DOMAIN}\nServerAlias www.${DOMAIN}\n&#" /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/${DOMAIN}.conf

7. Und wieder den Apache neustarten:

sudo systemctl restart apache2

8. Jetzt besorgen wir uns die Zertifikate. Dazu installieren wir den Certbot wie folgt:

sudo add-apt-repository ppa:certbot/certbot -y && \
sudo apt update && sudo apt upgrade -y && \
sudo apt install python-certbot-apache -y

9. Wenn alles installiert wurde, können wir uns ein Zertifikat für unsere Domain generieren.

sudo certbot --apache -d ${DOMAIN} -d www.${DOMAIN}

Nachdem alle Abhängigkeiten installiert wurden, öffnet sich ein Dialog, den wir Schritt-für-Schritt lesen und beantworten.

10. Für den Fall, dass mehrere Domains ein Zertifikat erhalten sollen, müssen die Schritte 6 und 9 entsprechend wiederholt werden (optional) .

11. Der Certbot erstellt uns einen neuen vHost, mit dem folgenden Pfad:
/etc/apache2/sites-available/000-default-le-ssl.conf
In dieser Datei fügen wir die Weiterleitung der Anfragen an den Varnish ein. Das können wir mit dem folgenden Befehl tun:

sudo sed -i "s#.*</VirtualHost>.*#ProxyPreserveHost On\nProxyPass / http://127.0.0.1:8080/\nRequestHeader set X-Forwarded-Port "443"\nRequestHeader set X-Forwarded-Proto "https"\n&#" /etc/apache2/sites-available/000-default-le-ssl.conf

12. Und nochmal den Apache neustarten:

sudo systemctl restart apache2

13. Jetzt ist der Grundstein gelegt und wir können Varnish installieren:

curl -L https://packagecloud.io/varnishcache/varnish5/gpgkey | sudo apt-key add - && \
sudo apt update && \
echo -e "deb https://packagecloud.io/varnishcache/varnish5/ubuntu/ trusty main\ndeb-src https://packagecloud.io/varnishcache/varnish5/ubuntu/ trusty main" | \
sudo tee --append /etc/apt/sources.list.d/varnishcache_varnish5.list > /dev/null && \
sudo apt update && sudo apt install varnish -y

14. Mit dem folgendem Befehl überschreiben wir die Varnish Startparameter:

sudo sed -i "s#Type=.*#Type=simple#g" /lib/systemd/system/varnish.service && \
sudo sed -i "s#ExecStart=.*#ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :8080 -T :8000 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,1024m#g" /lib/systemd/system/varnish.service && \
sudo systemctl daemon-reload

15. Abschließend die Varnish VCL anpassen und auf unseren Managed (v)Server verweisen.

export IP=BACKEND_IP && \
sudo sed -i "s#127.0.0.1#${IP}#" /etc/varnish/default.vcl && \
sudo sed -i "s#8080#80#g" /etc/varnish/default.vcl && \
unset IP
sudo systemctl start varnish

Fertig: Varnish-Installation abgeschlossen!

Ab sofort läuft die ausgewählte Domain verschlüsselt über den Varnish und man kann sich an die Konfiguration der VCL wagen.

Ähnliche Artikel:

Learnings & Re-Engineering
Hosting

mittwald Cloud Plattform Insights (II): Learnings & Re-Engineering

Blick auf den Infrastruktur-Unterbau der Cloud-Plattform, unsere Learnings aus dem Live-Betrieb und die Ziele des Re-Engineerings.

Text: mittwald Cloud Insights
Hosting

mittwald Cloud Plattform Insights (I): Architektur

So sieht die grundlegende Architektur der mittwald Cloud Plattform aus. Insights in Herausforderungen und Lösungsansätze.

Weiße Schrift auf blauem Hintergrund: Keine AV-Verträge? Bußgeld droht!
Hosting

AV-Verträge - Deshalb musst du dich drum kümmern

Freiberufler und Agenturen sind nach DSGVO dazu verpflichtet, AV-Vertrag abzuschließen. Machst du das nicht, drohen diese Konsequenzen.

Schriftzug "Eigene Extensions für mStudio entwickeln" vor blauem Hintergrund.
Hosting

Eigene Extensions für das mStudio entwickeln

Entwickele deine Extension für das mStudio und mache sie anderen zugänglich. Wir stellen Schnittstellen, Components und mehr zur Verfügung.

Hosting

Informationspflicht: Änderungen im AV-Vertrag oder Verarbeitungsverzeichnis

Änderungen im AV-Vertrag oder Verarbeitungsverzeichnis sind mit unserem AV-Manager easy. Aber wann müssen die Kund*innen informiert werden?

Kommentare

Hans Werner am
Könnt ihr mal bitte eine anständige Anleitung schreiben?
Was ist dass denn bitte für ein unsinniger Mist, denn ihr da macht?
Es fehlt ohne Ende an Infos.
Kristina Kiebe am
Hallo Hans Werner,

kannst du uns vielleicht verraten, welche Infos dir genau fehlen? Dann könnten wir diese ggf. auch im Artikel noch aufgreifen und erweitern.

Viele Grüße
Kristina