So konfigurieren Sie Varnish Cache 4.0 mit SSL-Terminierung unter Ubuntu 14.04

Einführung

In diesem Lernprogramm erfahren Sie, wie Sie mit Varnish Cache 4.0 die Leistung Ihres vorhandenen Webservers verbessern können. Wir zeigen Ihnen auch, wie Sie Varnish HTTPS-Unterstützung hinzufügen können, wobei Nginx die SSL-Kündigung vornimmt. Wir gehen davon aus, dass Sie bereits einen Webanwendungsserver eingerichtet haben, und verwenden einen generischen LAMP-Server (Linux, Apache, MySQL, PHP) als Ausgangspunkt.

Varnish Cache ist ein Caching-HTTP-Reverse-Proxy oder HTTP-Beschleuniger, der die Zeit reduziert, die zum Bereitstellen von Inhalten für einen Benutzer erforderlich ist. Die wichtigste Technik, die verwendet wird, ist das Zwischenspeichern von Antworten von einem Web- oder Anwendungsserver im Speicher, sodass zukünftige Anforderungen für denselben Inhalt bearbeitet werden können, ohne ihn vom Webserver abrufen zu müssen. Die Leistung kann in einer Vielzahl von Umgebungen erheblich verbessert werden. Dies ist besonders nützlich, wenn Sie über inhaltsintensive dynamische Webanwendungen verfügen. Varnish wurde mit Caching als Hauptmerkmal entwickelt, kann aber auch für andere Zwecke verwendet werden, beispielsweise für den Lastausgleich von Reverse-Proxys.

In vielen Fällen funktioniert Varnish gut mit seinen Standardeinstellungen, aber denken Sie daran, dass es optimiert werden muss, um die Leistung bei bestimmten Anwendungen zu verbessern, insbesondere bei Anwendungen, die Cookies verwenden. Die gründliche Optimierung von Lacken liegt außerhalb des Bereichs dieses Lernprogramms.

Voraussetzungen

In diesem Lernprogramm wird davon ausgegangen, dass Sie bereits einen Webanwendungsserver haben, der HTTP (Port 80) auf seiner privaten IP-Adresse überwacht. Wenn Sie noch keinen Webserver eingerichtet haben, verwenden Sie den folgenden Link, um Ihren eigenen LAMP-Stack einzurichten:How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 14.04. Wir werden diesen Server alsLAMP_VPS bezeichnen.

Existing Environment

Sie müssen ein neues Ubuntu 14.04 VPS erstellen, das für Ihre Varnish-Installation verwendet wird. Erstellen Sie einen Nicht-Root-Benutzer mit Sudo-Berechtigungen, indem Sie die Schritte 1 bis 4 ininitial server setup for Ubuntu 14.04 guideausführen. Wir werden diesen Server alsVarnish_VPS bezeichnen.

Denken Sie daran, dass der Varnish-Server Benutzeranforderungen empfängt und entsprechend dem erwarteten Datenverkehr dimensioniert sein sollte.

Unser Ziel

Our Goal

Unser Ziel ist es, den Lackcache vor unserem Webanwendungsserver einzurichten, damit Anfragen schnell und effizient bearbeitet werden können. Nachdem das Caching eingerichtet wurde, zeigen wir Ihnen, wie Sie Varnish HTTPS-Unterstützung hinzufügen, indem Sie Nginx verwenden, um eingehende SSL-Anforderungen zu verarbeiten. Nachdem die Einrichtung abgeschlossen ist, werden sowohl der HTTP- als auch der HTTPS-Datenverkehr die Leistungsvorteile des Zwischenspeicherns sehen.

Nachdem Sie die Voraussetzungen geschaffen haben und wissen, was Sie erstellen möchten, können Sie loslegen!

Installieren Sie den Lack

Der empfohlene Weg, um die neueste Version von Varnish 4.0 zu erhalten, ist die Installation des Pakets, das über das offizielle Repository verfügbar ist.

Ubuntu 14.04 wird mitapt-transport-https geliefert, aber führen Sie einfach den folgenden Befehl fürVarnish_VPS aus, um sicherzugehen:

sudo apt-get install apt-transport-https

Fügen Sie nun den Varnish GPG-Schlüssel zu apt hinzu:

curl https://repo.varnish-cache.org/ubuntu/GPG-key.txt | sudo apt-key add -

Fügen Sie dann das Varnish 4.0-Repository zu Ihrer Liste der passenden Quellen hinzu:

sudo sh -c 'echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list'

Aktualisieren Sie abschließend apt-get und installieren Sie Varnish mit den folgenden Befehlen:

sudo apt-get update
sudo apt-get install varnish

Standardmäßig ist Varnish so konfiguriert, dass es Port6081überwacht und erwartet, dass sich Ihr Webserver auf demselben Server befindet und Port8080überwacht. Öffnen Sie einen Browser und gehen Sie zu Port 6081 Ihres Servers (ersetzen Sie den markierten Teil durch Ihre öffentliche IP-Adresse oder Domain):

http://varnish_VPS_public_IP:6081

Da wir Varnish auf einem neuen VPS installiert haben, wird beim Besuch von Port6081 auf der öffentlichen IP-Adresse oder dem Domänennamen Ihres Servers die folgende Fehlerseite zurückgegeben:

503 Error

Dies weist darauf hin, dass Varnish installiert ist und ausgeführt wird, aber den Webserver, der zwischengespeichert werden soll, nicht finden kann. Lassen Sie es jetzt so konfigurieren, dass es unseren Webserver als Backend verwendet.

Lack konfigurieren

Zuerst konfigurieren wir Varnish so, dass unsereLAMP_VPS als Backend verwendet werden.

Die Lackkonfigurationsdatei befindet sich bei/etc/varnish/default.vcl. Bearbeiten wir es jetzt:

sudo vi /etc/varnish/default.vcl

Suchen Sie die folgenden Zeilen:

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

Ändern Sie die Werte vonhost undport entsprechend der privaten IP-Adresse und dem Überwachungsport Ihres LAMP-Servers. Beachten Sie, dass wir davon ausgehen, dass Ihre Webanwendung die private IP-Adresse und den Port 80 überwacht. Ist dies nicht der Fall, ändern Sie die Konfiguration entsprechend Ihren Anforderungen:

backend default {
    .host = "LAMP_VPS_private_IP";
    .port = "80";
}

Varnish verfügt über eine Funktion mit dem Namen "Grace-Modus", die bei Aktivierung Varnish anweist, eine zwischengespeicherte Kopie der angeforderten Seiten bereitzustellen, wenn Ihr Webserver-Backend ausfällt und nicht mehr verfügbar ist. Aktivieren wir das jetzt. Suchen Sie den folgendensub vcl_backend_response-Block und fügen Sie die folgenden hervorgehobenen Zeilen hinzu:

sub vcl_backend_response {
    set beresp.ttl = 10s;
    set beresp.grace = 1h;
}

Dadurch wird die Wartezeit für zwischengespeicherte Seiten auf eine Stunde festgelegt. Das bedeutet, dass Varnish zwischengespeicherte Seiten bis zu einer Stunde weiterliefert, wenn es Ihren Webserver nicht erreichen kann, um nach einer neuen Kopie zu suchen. Dies kann nützlich sein, wenn Ihr Anwendungsserver ausfällt und Sie es vorziehen, dass veraltete Inhalte anstelle einer Fehlerseite (wie dem 503-Fehler, den wir zuvor gesehen haben) an Benutzer gesendet werden, während Sie Ihren Webserver sichern.

Speichern und beenden Sie die Dateidefault.vcl.

Wir möchten Varnish so einstellen, dass es den Standard-HTTP-Port (80) überwacht, damit Ihre Benutzer auf Ihre Site zugreifen können, ohne Ihrer URL eine ungewöhnliche Portnummer hinzuzufügen. Dies kann in der Datei/etc/default/varnish festgelegt werden. Bearbeiten wir es jetzt:

sudo vi /etc/default/varnish

Sie werden viele Zeilen sehen, aber die meisten sind auskommentiert. Suchen Sie die folgende Zeile vonDAEMON_OPTS(sie sollte bereits unkommentiert sein):

DAEMON_OPTS="-a :6081 \

Die Option-a wird verwendet, um die Adresse und den Port zuzuweisen, an denen Varnish auf Anforderungen wartet. Ändern wir es, um den Standard-HTTP-Port 80 abzuhören. Nach Ihrer Änderung sollte es so aussehen:

DAEMON_OPTS="-a :80 \

Speichern und schließen.

Starten Sie nun Varnish neu, damit die Änderungen wirksam werden:

sudo service varnish restart

Testen Sie es jetzt mit einem Webbrowser, indem Sie Ihren Varnish-Server anhand seiner öffentlichen IP-Adresse auf Port 80 (HTTP) dieses Mal besuchen:

http://varnish_VPS_public_IP

Sie sollten dasselbe sehen, das von Ihrem LAMP_VPS geliefert wird. In unserem Fall handelt es sich nur um eine einfache Apache2-Ubuntu-Seite:

Apache2 Ubuntu Default Page

Zu diesem Zeitpunkt wird unser Anwendungsserver von Varnish zwischengespeichert - hoffentlich sehen Sie Leistungsvorteile in einer kürzeren Antwortzeit. Wenn Sie einen Domainnamen hatten, der auf Ihren vorhandenen Anwendungsserver verweist, können Sie dessen DNS-Eintrag so ändern, dass er auf IhreVarnishVPSpublic_IP verweist.

Nachdem wir das grundlegende Caching eingerichtet haben, fügen wir die SSL-Unterstützung mit Nginx hinzu.

SSL-Unterstützung mit Nginx (optional)

Da Varnish die native SSL-Beendigung nicht unterstützt, werden wir Nginx nur zum Zwecke der Verarbeitung von HTTPS-Datenverkehr installieren. Wir werden die Schritte zum Installieren und Konfigurieren von Nginx mit einem selbstsignierten SSL-Zertifikat und zum Umkehren des Proxy-Verkehrs von einer HTTPS-Verbindung zu Varnish über HTTP behandeln.

Wenn Sie eine ausführlichere Erläuterung zum Einrichten eines selbstsignierten SSL-Zertifikats mit Nginx wünschen, lesen Sie diesen Link:SSL with Nginx for Ubuntu. Wenn Sie ein Zertifikat von StartSSL ausprobieren möchten,here is a tutorial that covers that.

Lassen Sie uns Nginx installieren.

Installieren Sie Nginx

Installieren Sie Nginx unterVarnish_VPS mit dem folgenden Befehl apt:

sudo apt-get install nginx

Nach Abschluss der Installation werden Sie feststellen, dass Nginx nicht ausgeführt wird. Dies liegt daran, dass es standardmäßig so konfiguriert ist, dass es Port 80 überwacht, aber Varnish verwendet diesen Port bereits. Dies ist in Ordnung, da wir den Standard-HTTPS-Port, Port 443, überwachen möchten.

Generieren wir das von uns verwendete SSL-Zertifikat.

Generieren Sie ein selbstsigniertes SSL-Zertifikat

Erstellen Sie unterVarnish_VPS ein Verzeichnis, in dem das SSL-Zertifikat abgelegt werden kann:

sudo mkdir /etc/nginx/ssl

Generieren Sie ein selbstsigniertes 2048-Bit-Paar aus SSL-Schlüssel und Zertifikat:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

Stellen Sie sicher, dass Siecommon name so einstellen, dass sie mit Ihrem Domainnamen übereinstimmen. Dieses spezielle Zertifikat läuft in einem Jahr ab.

Nachdem wir unser Zertifikat eingerichtet haben, konfigurieren wir Nginx für die Verwendung.

Konfigurieren Sie Nginx

Öffnen Sie die Standard-Nginx-Serverblockkonfiguration zum Bearbeiten:

sudo vi /etc/nginx/sites-enabled/default

Löschen Sie alles in der Datei und ersetzen Sie es durch Folgendes (und ändern Sie dieserver_name entsprechend Ihrem Domainnamen):

server {
        listen 443 ssl;

        server_name example.com;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        location / {
            proxy_pass http://127.0.0.1:80;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $host;
        }
}

Speichern und schließen. Die obige Konfiguration enthält einige wichtige Zeilen, die wir genauer erläutern werden:

  • ssl_certificate: Gibt den Speicherort des SSL-Zertifikats an

  • sslcertificatekey: Gibt den Speicherort des SSL-Schlüssels an

  • listen 443 ssl: Konfiguriert Nginx so, dass Port 443 überwacht wird

  • server_name: Gibt Ihren Servernamen an und sollte mit dem allgemeinen Namen Ihres SSL-Zertifikats übereinstimmen

  • proxy_pass http://127.0.0.1:80;: Leitet den Datenverkehr zu Varnish um (das auf Port 80 von 127.0.0.1 ausgeführt wird (d. h. localhost)

Die anderenproxy_set_header-Zeilen weisen Nginx an, Informationen wie die IP-Adresse des ursprünglichen Benutzers zusammen mit Benutzeranforderungen weiterzuleiten.

Starten wir nun Nginx, damit unser Server HTTPS-Anforderungen verarbeiten kann.

sudo service nginx start

Testen Sie diesmal mit einem Webbrowser, indem Sie Ihren Varnish-Server anhand seiner öffentlichen IP-Adresse auf Port 443 (HTTPS) aufrufen:

https://varnish_VPS_public_IP

Note: Wenn Sie ein selbstsigniertes Zertifikat verwendet haben, wird eine Warnung mit der Meldung "Das Sicherheitszertifikat der Site ist nicht vertrauenswürdig" angezeigt. Da Sie wissen, dass Sie gerade das Zertifikat erstellt haben, können Sie sicher fortfahren.

Sie sollten wieder dieselbe Anwendungsseite wie zuvor sehen. Der Unterschied besteht darin, dass Sie tatsächlich den Nginx-Server besuchen, der die SSL-Verschlüsselung übernimmt und die unverschlüsselte Anfrage an Varnish weiterleitet, der die Anfrage wie gewohnt behandelt.

Konfigurieren Sie den Backend-Webserver

Wenn Ihr Back-End-Webserver an alle Netzwerkschnittstellen gebunden ist (d. H. öffentliche und private Netzwerkschnittstellen) möchten Sie Ihre Webserverkonfiguration so ändern, dass nur die private Schnittstelle überwacht wird. Dies soll verhindern, dass Benutzer direkt über ihre öffentliche IP-Adresse auf Ihren Back-End-Webserver zugreifen, wodurch der Lackcache umgangen wird.

In Apache oder Nginx würde dies das Zuweisen des Werts der Direktivenlistenzur Bindung an die private IP-Adresse Ihres Backend-Servers beinhalten.

Fehlerbehebung bei Lacken

Wenn Sie Probleme haben, Varnish dazu zu bringen, Ihre Seiten ordnungsgemäß zu bedienen, finden Sie hier einige Befehle, mit denen Sie sehen können, was Varnish hinter den Kulissen tut.

Statistiken

Wenn Sie eine Vorstellung davon bekommen möchten, wie gut Ihr Cache funktioniert, sollten Sie sich den Befehlvarnishstatansehen. Führen Sie es so aus:

varnishstat

Sie erhalten einen Bildschirm, der wie folgt aussieht:

Varnish Stats

Es gibt eine Vielzahl von Statistiken, die angezeigt werden. Wenn Sie die Aufwärts- / Abwärtspfeile zum Blättern verwenden, wird eine kurze Beschreibung der einzelnen Elemente angezeigt. Die Statistikcache_hitzeigt an, wie viele Anforderungen mit einem zwischengespeicherten Ergebnis bearbeitet wurden. Sie möchten, dass diese Anzahl so nahe wie möglich an der Gesamtzahl der Clientanforderungen (client_req) liegt.

Drücken Sieq, um den Vorgang zu beenden.

Logs

Wenn Sie eine detaillierte Ansicht darüber erhalten möchten, wie Varnish jede einzelne Anforderung in Form eines Streaming-Protokolls verarbeitet, sollten Sie den Befehlvarnishlog verwenden. Führen Sie es so aus:

varnishlog

Versuchen Sie nach dem Start, über einen Webbrowser auf Ihren Varnish-Server zuzugreifen. Für jede Anfrage, die Sie an Varnish senden, wird eine detaillierte Ausgabe angezeigt, die zur Fehlerbehebung und Optimierung Ihrer Varnish-Konfiguration verwendet werden kann.

Drücken SieCTRL + C, um den Vorgang zu beenden.

Fazit

Da sich vor Ihrem Webserver ein Varnish-Cache-Server befindet, werden Sie in den meisten Fällen eine verbesserte Leistung feststellen. Denken Sie daran, dass Varnish sehr leistungsfähig und einstellbar ist und möglicherweise zusätzliche Anpassungen erforderlich sind, um den vollen Nutzen daraus zu ziehen.