VCL-Handbuch: Varnish Configuration Language

In früheren Artikeln haben wir gezeigt, wie Sie Varnish unter Ubuntu installieren und wie Sie Varnish auf einfache Weise konfigurieren. In diesem VCL-Handbuch wird nun auf VCL (Varnish Configuration Language) eingegangen . Mit dieser VCL-Sprache können wir Varnish so konfigurieren, dass wir die volle Kontrolle über die Logik haben, mit der es Anforderungen verarbeitet.

Mit der VCL-Konfigurationssprache können wir C-Code einbetten, der bei der Verarbeitung der VCL-Konfigurationsdatei kompiliert wird.

In vielen Varnish-Tutorials bezieht sich der Begriff Backend auf das Programm hinter Varnish. In diesem Tutorial wird anstelle des Wortes Backend das Wort Apache verwendet, da dies normalerweise eines der häufigsten Backends ist.

VCL-Handbuch: Varnish Configuration Language

Als Erstes werden die verschiedenen Standardunterprogramme vorgestellt, die für die VCL-Sprache verfügbar sind:

  • vlc_recv ()
  • vcl_fetch ()
  • vcl_pass ()
  • vcl_hit ()
  • vcl_miss ()
  • vcl_deliver ()
  • vcl_error ()
  • vcl_pipe ()
  • vcl_hash ()

Es sollte klar sein, dass eine HTTP-Anforderung, die in Varnish eintrifft, über die verschiedenen Subroutinen in unserer Konfigurations-vcl-Datei verarbeitet wird. Später werden wir sehen, dass die Reihenfolge, in der diese Subroutinen angewendet werden, sehr konkret ist .

vlc_recv ()

Wenn Varnish eine Anfrage erhält, trifft diese Subroutine die Entscheidung, ob er die Anfrage annimmt oder nicht und ob er sie annimmt, wie er sie verarbeiten wird. Wenn die Anfrage eingeht, erstellt Varnish automatisch eine Reihe von Objekten, um mit der Logik in dieser Subroutine zu arbeiten (in dieser Subroutine haben wir das Objekt req , um damit zu arbeiten, zum Beispiel mit req.url , req.host , req.request, etc). . Dies ist das Unterprogramm, mit dem wir die Logik beim Empfang der HTTP-Anforderung steuern.

vcl_fetch ()

Diese Unterroutine wird ausgeführt, nachdem vlc_recv() die Anforderung akzeptiert und Apache die Antwort gesendet hat. Wir haben das req Objekt, um damit zu arbeiten, und ein neues mit dem Namen beresp (das wir gemäß unseren Anforderungen beresp können, zum Beispiel können wir Cookies löschen, die TTL ändern usw.). In dieser Unterroutine ändern wir die Antwort, die unser Server geben würde. Es ist das Unterprogramm, mit dem wir die Logik zur Manipulation der HTTP-Antwort steuern.

See also  Installieren Sie FFmpeg einfach in Ubuntu oder CentOS

Es gibt immer noch mehr Subroutinen, als wir später besprechen werden, aber da dies die beiden am häufigsten verwendeten sind, erkläre ich die verschiedenen Aktionen, die wir in jeder Subroutine ausführen können (diese Reihenfolge der Erklärung scheint mir die beste zu sein, um die Dinge leichter zu verstehen). Diese Aktionen geben die Steuerung der Anforderung an Varnish zurück und werden dazu über die Funktionsausgabe return() ausgeführt.
Die verschiedenen Aktionen, die Varnish ausführen kann, sind:

  • bestehen
  • Rohr
  • Nachschlagen
  • liefern
  • hit_for_pass
  • neu starten

bestehen

Wir nennen diese Aktion in der Form return(pass); und was wir bekommen, ist, dass die Anfrage direkt an Apache (oder unser Backend) gesendet wird, ohne im Cache danach zu suchen, und daher die Antwort, die der Benutzer von Varnish erhält, eine Antwort ohne Caching ist. Diese Aktion wird in der vlc_recv() (für die vcl_fetch() die Aktion vcl_fetch() hit_for_pass , die der Aktion pass ähnelt, und wir werden später darauf vcl_fetch() ). Es wird empfohlen, die erforderlichen pass in der vlc_recv() anstatt hit_for_pass in der Unterroutine vcl_fetch() .

Rohr

Diese Aktion ermöglicht die direkte Kommunikation zwischen dem Client (z. B. über den Browser des Benutzers) und Apache, da Varnish nur ein transparenter Vermittler ist, der keine Funktion ausführt, ohne die HTTP-Anforderung oder die Antwort zu verarbeiten. Diese Aktion erstellt kein Objekt, über das wir zuvor gesprochen haben ( req , bresp usw.), und Varnish verarbeitet die Anforderungen überhaupt nicht, sondern bresp nur als Messenger zwischen Client und Apache. Diese Aktion ist nützlich, wenn Sie mit großen Videodateien arbeiten (damit Varnish sie nicht verarbeitet) oder wenn Sie eine HTTP-Methode verwenden, die von Varnish nicht unterstützt wird, die Apache jedoch versteht.

Nachschlagen

Diese Aktion kann nur von vcl_recv() Wir teilen Varnish mit, dass wir den Cache verwenden möchten, um eine Antwort an den Client zu vcl_recv() . Es wird im Formular return(lookup); und es sollte klargestellt werden, dass Varnish mit dieser Aktion gezwungen ist, den Cache zu durchsuchen, selbst wenn die Anforderung nicht zwischengespeicherten Inhalt anfordert .

liefern

Es wird in der Regel in Form einer return(deliver); Diese Aktion bewirkt, dass Varnish das zwischengespeicherte Objekt an den Client zurückgibt (sofern es im Cache vorhanden ist). Es wird normalerweise von vcl_fetch() .

hit_for_pass

Es ist eine Aktion ähnlich wie pass nur dass sie von vcl_fetch() und außerdem die Besonderheit hat, dass mit hit_for_pass ein Objekt vom Typ hitforpass mit dem die Entscheidung, nicht zwischenzuspeichern, zwischengespeichert wird. Die Entscheidung, nicht zu zwischenspeichern, wird für die Dauer des Standard-ttl zwischengespeichert, und zusätzlich zum Nicht-Zwischenspeichern wird die vcl_pass() nicht ausgeführt (was später vcl_pass() wird). Aus diesem Grund bestehen wir darauf, dass es besser ist, die Pass-Aktion von vcl_recv() .

neu starten

Führen Sie die VCL-Logik erneut ab dem Beginn der Unterroutine vcl_recv() jedoch mit der Besonderheit, dass diese beibehalten werden, wenn vor dem restart Änderungen am req Objekt vorgenommen wurden. Bei jedem Neustart wird die Variable req.restarts und kann maximal so oft neu gestartet werden, wie durch den Parameter max_restarts angegeben.

See also  So greifen Sie über die Linux-Konsole auf MariaDB oder MySQL zu

Bevor wir uns mit zwei vcl_recv() und vcl_fetch() vcl_recv() vcl_fetch() da es sich um die grundlegenden und die am häufigsten verwendeten handelt. Es sind jedoch auch die folgenden Unterroutinen verfügbar, die möglicherweise zu einem bestimmten Zeitpunkt verwendet werden müssen:

vcl_hash ()

Ermöglicht das Ändern des Hashs, mit dem das Objekt im Cache identifiziert wird.

vcl_pipe ()

Dieses Unterprogramm wird ausgeführt, wenn die pipe Aktion aufgerufen wird.

vcl_pass ()

Dieses Unterprogramm wird ausgeführt, wenn die pass Aktion aufgerufen wird.

vcl_hit ()

Es wird ausgeführt, wenn die lookup aufgerufen wird und auch ein gültiges zwischengespeichertes Objekt gefunden wird.

vcl_miss ()

Es wird ausgeführt, wenn die lookup aufgerufen wird und auch ein gültiges zwischengespeichertes Objekt nicht gefunden wird.

vcl_error ()

Diese Unterroutine wird ausgeführt, wenn ein interner Fehler vorliegt.

vcl_deliver ()

Diese Unterroutine wird ausgeführt, wenn die deliver aufgerufen wird, und wird unmittelbar vor dem Senden des zwischengespeicherten Objekts an den Client ausgeführt.

Nachdem wir alle Aktionen und Unterprogramme von Varnish im Auge haben und eine ungefähre Vorstellung davon haben, was wir mit jedem tun können, ist es ratsam, einen Moment innezuhalten und das folgende Schema zu betrachten, um eine Vorstellung davon zu bekommen, wie die VCL-Datei verarbeitet wird.

In dem Schema können wir den Ablauf der Ausführung der verschiedenen Unterroutinen sehen, von dem Zeitpunkt an, an dem Varnish die Anfrage des Kunden erhält, bis er eine Antwort zurückgibt. Die Namen der Subroutinen haben die Wörter “yours” oder “default” in Klammern. Dies soll die Priorität angeben, mit der die benutzerdefinierte Subroutinenlogik zuerst ausgeführt wird, und dann diejenige, die standardmäßig definiert ist.

See also  Sicheres SSH auf unserem Server

Wenn wir uns das Schema ansehen, bekommen wir eine Vorstellung davon, wie sich Varnish verhält, um Anfragen und Antworten zu verarbeiten. Unser Ziel ist es, die Logik der VCL-Datei so zu programmieren, dass Varnish sich so verhält, wie wir es brauchen, und zu entscheiden, welche Objekte zwischengespeichert werden und welche nein, etc … Um dies zu erreichen, haben wir Zufallsregeln, mit denen wir die verschiedenen Objekte (req, bresp, etc …) überprüfen und so Entscheidungen treffen können. Diese Übereinstimmungsregeln werden mit einer if Bedingung definiert, wie in den folgenden Beispielen gezeigt:

 if (req.url ~ "^/phpMyAdmin") {         ...         ...     }  if (req.request == "POST") {         ...         ...     }  if (obj.hits > 0) {         ...         ...     } 

So validieren Sie die Konfiguration von Varnish VCL

Nachdem wir uns darüber im Klaren sind, wie eine VCL-Datei mit ihrer Logik erstellt werden soll, können wir sie bereits in Varnish verwenden. Es ist jedoch ratsam, vor der Inbetriebnahme zu überprüfen, ob sie korrekt kompiliert wird, da wir immer einen Fehler machen können. Um diese Prüfung durchzuführen, können wir den folgenden Befehl ausführen:

varnishd -C -f /etc/varnish/default.vcl

In diesem Fall ist /etc/varnish/default.vcl der Pfad, in dem sich die zu /etc/varnish/default.vcl VCL-Datei befindet. Wenn es richtig kompiliert wurde, können wir es verwenden. Wenn es nicht kompiliert wurde, wird ein Fehler angezeigt, der angibt, in welcher Zeile der Fehler erkannt wurde, damit wir ihn beheben können.

Bisher mussten wir mit dem Varnish-VCL-Handbuch und der Konfiguration seiner Logik nur einige Beispiele sehen und sie sorgfältig analysieren, um einen besseren Kontakt zu erhalten. Anschließend konnten wir eine benutzerdefinierte VCL-Konfiguration erstellen.

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *