Varnish auf Rootservern installieren
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.
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.
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 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.
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.
Kommentare
Was ist dass denn bitte für ein unsinniger Mist, denn ihr da macht?
Es fehlt ohne Ende an Infos.
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