März 14, 2022

So richten Sie einen Varnish-Cache-Server ein – Swapps

Websites mit hohem Datenverkehr müssen denselben Inhalt mehrmals für verschiedene Benutzer bereitstellen. Abhängig von Ihrer Anwendung kann es sehr teuer sein (Ressourcen sprechen), die gesamte Anwendungslogik jedes Mal zu verarbeiten, wenn ein Benutzer eine Webseite anfordert. Hier ist, wo Server-Caching kommt, Sie können nur eine temporäre Kopie des Inhalts im Speicher speichern und diesen Inhalt an alle Benutzer dienen.

Varnish eignet sich hervorragend zum Zwischenspeichern von Inhalten auf der Serverseite. Im Wesentlichen sollten Sie HTML-Inhalte zwischenspeichern, aber Sie können auch Dateien zwischenspeichern: CSS, JS, Bilder, Dokumente.

Es klingt gut, aber die Wahrheit ist, dass Varnish standardmäßig nichts tut, oder zumindest könnten Sie die Vorteile dieser Software verschwenden, und die Dokumentation hilft nicht. Ich werde erklären, wo und wie Sie einen Varnish-Cache-Server für Ihre Anwendung konfigurieren, testen und bereitstellen.

Nehmen wir zu Demonstrationszwecken an, wir haben 2 Serverinstanzen für unsere App- und Cache-Server mit den folgenden lokalen IP-Adressen:

  • App-Server: 192.168.1.2
  • Cacheserver: 192.168.1.3

Install Varnish Cache Server

Zu diesem Zweck werden wir einen Ubuntu Server 16.04 mit Varnish 4.0 installieren. Um Varnish zu installieren, müssen Sie nur Folgendes ausführen:

sudo apt install varnish

Ich werde Varnish 4.0 installieren, und von nun an werden Sie 2 spezifischen Dateien besondere Aufmerksamkeit schenken:/etc/default/varnishund /etc/varnish/default.vcl

Backend-Konfiguration

Das erste, was Sie tun müssen, ist, das Backend zu konfigurieren oder Varnish anzuweisen, wo die Webanwendung leben wird:

  • Was ist der Hostname oder die IP-Adresse?
  • Was ist der Port?

Um dies zu definieren, müssen Sie die Datei /etc/varnish/default.vclaktualisieren und den folgenden Abschnitt finden, der für unseren Beispielzweck wie folgt konfiguriert wird:

backend default { .host = "192.168.1.2"; .port = "8080"; .first_byte_timeout = 60s; .connect_timeout = 300s;}

Es weist Varnish an, die Anwendung unter IP 192.168.1.2 und Port 8080 abzuhören.

Konfigurieren Sie den Varnish-Daemon

Als erstes müssen Sie definieren, wo Varnish ausgeführt wird. Wir werden es auf dem Standardport 6081 laufen lassen. Es ist sehr üblich, diesen Daemon auf Port 80 und 443 für SSL auszuführen, aber wir ziehen es vor, NGINX in den Vordergrund zu stellen und es dem Datenverkehr zu überlassen.

In Bezug auf den Speicher wird eine leere Varnish-Installation mit 256 MB Speicher ausgeführt, was für einige Anwendungen ausreichen könnte, aber für Apps mit hohem Datenverkehr möglicherweise nicht ausreicht, und mehr, wenn Sie einen dedizierten Server nur für den Cache reserviert haben.

Sie können das ändern unter:

/etc/default/varnish

Finden Sie den folgenden Abschnitt:

DAEMON_OPTS="-a :6081 \-T localhost:6082 \-f /etc/varnish/default.vcl \-S /etc/varnish/secret \-s malloc,256m"

Um die RAM-Größe zu aktualisieren, ändern Sie die letzte Zeile mit der Aufschrift 256m und aktualisieren Sie auf den erforderlichen Wert. In meinem Fall möchte ich 3 GB RAM für Lack verwenden, damit der Block so aussieht:

DAEMON_OPTS="-a :6081 \-T localhost:6082 \-f /etc/varnish/default.vcl \-S /etc/varnish/secret \-s malloc,3G"

Überprüfen Sie, ob es mit der richtigen Konfiguration ausgeführt wird

Bestätigen Sie, dass es wie erwartet ausgeführt wird, überprüfen Sie den Prozess ps aux | grep varnish und Sie sollten Folgendes sehen:

/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T :6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,3G

Fix Varnish Startup Daemon in einigen Ubuntu-Installationen

Wir haben einen Fehler festgestellt, bei dem der Dienst nicht den in der Varnish-Datei definierten Anweisungen folgt und Sie möglicherweise den Startdienst bearbeiten müssen.

Öffnen und bearbeiten Sie dazu die Datei

/lib/systemd/system/varnish.service

und Sie werden so etwas sehen:

Description=Varnish HTTP acceleratorDocumentation=https://www.varnish-cache.org/docs/4.1/ man:varnishdType=simpleLimitNOFILE=131072LimitMEMLOCK=infinityExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T :6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256MExecReload=/usr/share/varnish/reload-vclProtectSystem=fullProtectHome=truePrivateTmp=truePrivateDevices=trueWantedBy=multi-user.target

Damit es funktioniert, müssen Sie den Abschnitt in der Zeile ExecStart aktualisieren und durch die erforderliche Konfiguration ersetzen:

ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T :6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,3G

Nachdem Sie damit fertig sind, müssen Sie den Dienstdämon neu laden: systemctl daemon-reload und starten Sie dann Varnish neu.

So konfigurieren Sie das Löschen des Cache

Es gibt 2 Möglichkeiten, den Varnish-Cache zu löschen:

  • Starten Sie den Dienst neu.
  • Sendet eine Bereinigungsanforderung an den Varnish-Server.

Neustart: Es geht nur darum, den Dienst neu zu starten:

sudo service varnish restart

Aber was wir wirklich brauchen, ist in der Lage zu sein, eine Bereinigungsanforderung vom Anwendungsserver zu senden. Dies kann erreicht werden, indem der Server angewiesen wird, einen bestimmten PFAD oder alle zu löschen. Bei Verwendung von CURL würde die Anfrage folgendermaßen aussehen:

curl -X PURGE http://192.168.1.3:6181

Standardmäßig lässt Varnish keine Bereinigungsanforderung von einem externen Server zu, daher müssen Sie Anforderungen vom Anwendungsserver zulassen. Bearbeiten Sie dazu /etc/varnish/default.vclund suchen Sie den Abschnitt Bereinigen, in dem Sie die IP-Adresse des App-Servers hinzufügen müssen:

acl purge { "localhost"; "127.0.0.1"; "192.168.1.2"/24;}

So debuggen Sie die BEREINIGUNG

Sie müssen überprüfen, ob alles korrekt funktioniert. Dazu können Sie den folgenden Befehl verwenden:

varnishlog -g request -q 'ReqMethod eq "PURGE"'

Dann können Sie eine Bereinigungsanforderung senden und sollten so etwas sehen, um zu bestätigen, dass die Bereinigungsanforderung empfangen wurde:

* << Request >> 1179851- Begin req 1179850 rxreq- ReqStart 192.168.195.197 39700- ReqMethod PURGE- ReqURL /.*- ReqProtocol HTTP/1.1- ReqHeader Host: swapps.com- ReqHeader User-Agent: W3 Total Cache- ReqHeader Connection: close- ReqHeader X-Forwarded-For: 192.168.195.197- VCL_call RECV- Timestamp Process: 1531199642.768541 0.000094 0.000094- RespHeader Date: Tue, 10 Jul 2018 05:14:02 GMT- RespHeader Server: Varnish- RespHeader X-Varnish: 1179851- RespProtocol HTTP/1.1- RespStatus 200- RespReason OK- RespReason Purged- End

Ein 200 OK-Status bedeutet, dass alles gut gelaufen ist und Varnish den Cache für die angeforderte URL gelöscht hat.

Der nächste Schritt, wenn Sie dies noch nicht getan haben, besteht darin, die Regeln zu konfigurieren, welche Inhalte Sie zwischenspeichern möchten und welche nicht.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.