CentOS 7.5 stellt Varnish-Cache-Serverfunktion bereit

CentOS 7.5 stellt Varnish-Cache-Serverfunktion bereit

1. Einführung in Varnish

Varnish ist ein leistungsstarker Open-Source-Reverse-Proxy-Server und HTTP-Cache-Server. Seine Funktionen ähneln denen des Squid-Servers und können für das HTTP-Caching verwendet werden. Sie können Varnish auf jedem Web-Frontend installieren und so konfigurieren, dass Inhalte zwischengespeichert werden. Im Vergleich zum herkömmlichen Squid bietet Varnish viele Vorteile, beispielsweise eine höhere Leistung, höhere Geschwindigkeit und einfachere Verwaltung. Einige Unternehmen haben es bereits in Produktionsumgebungen als Alternative zu älteren Versionen von Squid eingesetzt, um bessere Caching-Effekte bei gleichen Serverkosten zu erzielen. Varnish ist auch einer der optionalen Dienste von CDN-Cache-Servern.

Die Hauptfunktionen von Varnish sind wie folgt:

Cache-Speicherort: Es kann entweder der Speicher oder die Festplatte verwendet werden. Wenn Sie Festplatten verwenden möchten, wird SSD für RAID1 empfohlen;

Protokollspeicherung: Protokolle werden auch im Speicher abgelegt. Speicherstrategie: feste Größe, zirkuläre Nutzung;

Unterstützt die Verwendung von virtuellem Speicher;

Es gibt einen präzisen Zeitverwaltungsmechanismus, nämlich die Zeitattributsteuerung des Caches.

State-Engine-Architektur: Die Verarbeitung verschiedener Cache- und Proxy-Daten erfolgt auf unterschiedlichen Engines. Mithilfe einer bestimmten Konfigurationssprache können unterschiedliche Steueranweisungen entworfen werden, um die unterschiedlichen Möglichkeiten zum Zwischenspeichern von Daten an verschiedenen Orten festzulegen und die weitergeleiteten Nachrichten an bestimmten Orten nach bestimmten Regeln zu verarbeiten.

Cache-Verwaltung: Verwalten Sie Cache-Daten im binären Heap-Format, um eine zeitnahe Datenbereinigung sicherzustellen.

Im Vergleich zu Squid ist Varnish ein Reverse-Proxy-Cache-Server und beide sind Open Source. Varnish ist sehr stabil und hat eine schnelle Zugriffsgeschwindigkeit, da Squid zwischengespeicherte Daten von der Festplatte liest, während Varnish die Daten im Speicher speichert und den Speicher direkt liest, wodurch häufiges Auslagern von Dateien zwischen Speicher und Festplatte vermieden wird. Daher ist Varnish relativ effizienter. Varnish kann mehr gleichzeitige Verbindungen unterstützen, da Varnish TCP-Verbindungen schneller freigibt als Squid. Varnish kann auch reguläre Ausdrücke verwenden, um Teile des Caches stapelweise über den Verwaltungsport zu löschen, was Squid nicht kann. Squid ist ein einzelner Prozess, der eine Single-Core-CPU verwendet, aber Varnish öffnet mehrere Prozesse in Form einer Verzweigung zur Verarbeitung, sodass alle Kerne sinnvoll zur Verarbeitung entsprechender Anforderungen verwendet werden können.

Die oben genannten Vorteile von Varnish sind zwar vielfältig, aber Varnish ist nicht perfekt. Seine Hauptnachteile sind folgende:

1. Sobald der Varnish-Prozess abstürzt oder neu gestartet wird, werden die zwischengespeicherten Daten vollständig aus dem Speicher freigegeben und alle Anfragen werden

Das Senden an den Backend-Server verursacht in Situationen mit hoher Parallelität großen Druck auf den Backend-Server.

2. Wenn bei Verwendung von Varnish eine einzelne URL-Anforderung über einen Lastenausgleich wie HA/F5 läuft, fällt jede Anforderung auf einen anderen Varnish-Server, wodurch die Anforderung bis zum Backend durchdringt. Außerdem wird dieselbe Anforderung auf mehreren Servern zwischengespeichert, wodurch auch die Cache-Ressourcen von Varnish verschwendet werden und die Leistung beeinträchtigt wird.

Lösungen für die Nachteile von Lacken:

Zu Nachteil 1: Bei großem Datenverkehr empfiehlt es sich, den Speichercache-Modus von Varnish zu verwenden, und es müssen mehrere Squid/nginx-Server folgen. Dies dient hauptsächlich dazu, zu verhindern, dass eine große Anzahl von Anforderungen Varnish durchdringt, wenn der vorherige Varnish-Dienst oder -Server neu gestartet wird. Auf diese Weise kann Squid / nginx als Cache der zweiten Ebene fungieren und das Problem beheben, dass der Varnish-Cache im Speicher beim Neustart freigegeben wird.

Zum zweiten Nachteil: Sie können URL-Hashing auf dem Load Balancer durchführen, um eine einzelne URL-Anfrage an einen Varnish-Server zu senden.

2. Wie Varnish funktioniert

Der Masterprozess von Varnish ist für den Arbeitsstart verantwortlich. Der Masterprozess liest die Konfigurationsdatei, erstellt Speicherplatz entsprechend der angegebenen Speicherplatzgröße (z. B. weist der Administrator 2 GB Speicher zu) und erstellt und verwaltet untergeordnete Prozesse.

Anschließend übernimmt der untergeordnete Prozess die nachfolgenden Aufgaben. Er weist einige Threads zu, um verschiedene Aufgaben auszuführen, z. B.: Akzeptieren von HTTP-Anfragen, Zuweisen von Speicherplatz für Cache-Objekte, Löschen abgelaufener Cache-Objekte, Freigeben von Speicherplatz, Defragmentierung usw.

Der HTTP-Anforderungsverarbeitungsprozess läuft wie folgt ab:

1. Es gibt einen Thread, der ausschließlich für den Empfang von HTTP-Anfragen zuständig ist und ständig auf den Anfrageport lauscht. Wenn eine Anfrage eingeht, ist er dafür verantwortlich, einen Worker-Thread aufzurufen, um die Anfrage zu verarbeiten. Der Worker-Thread analysiert die URI der HTTP-Anfrage, weiß, was die Anfrage will, und sucht dann im Cache nach dem Objekt. Wenn ja, wird das Cache-Objekt direkt an den Benutzer zurückgegeben. Wenn nicht, wird die Anfrage zur Verarbeitung an den Back-End-Server übertragen und wartet auf das Ergebnis. Nachdem der Worker-Thread den Ergebnisinhalt vom Back-End erhalten hat, speichert er den Inhalt zunächst als Cache-Objekt im Cache-Speicher (um eine schnelle Antwort für die nächste Objektanforderung vorzubereiten) und gibt den Inhalt dann an den Benutzer zurück.

Der Cache-Zuweisungsprozess läuft wie folgt ab:

Wenn ein Objekt zwischengespeichert werden muss, wird der freie Cache-Bereich nach einem freien Block der am besten geeigneten Größe basierend auf der Größe des Objekts durchsucht. Sobald dieser gefunden wurde, wird das Objekt darin abgelegt. Wenn das Objekt den freien Block nicht ausfüllt, wird der verbleibende Platz als neuer freier Block verwendet. Wenn im freien Cache-Bereich kein Platz vorhanden ist, muss ein Teil des Caches gelöscht werden, um Platz zu schaffen. Das Löschen basiert auf dem Prinzip der am wenigsten kürzlichen Verwendung.

Der Vorgang zum Freigeben des Caches läuft wie folgt ab:

Es gibt einen Thread, der für die Freigabe des Caches verantwortlich ist. Er überprüft regelmäßig den Lebenszyklus aller Objekte im Cache. Wenn innerhalb eines bestimmten Zeitraums nicht auf ein Objekt zugegriffen wurde, wird das Objekt gelöscht und der von ihm belegte Cache-Speicherplatz freigegeben. Nach der Freigabe des Speicherplatzes wird geprüft, ob der angrenzende Speicherplatz frei ist. Wenn ja, wird er in einen größeren freien Block integriert, um eine Speicherplatzfragmentierung zu erreichen.

Weitere Varnish-Funktionen finden Sie auf der offiziellen Varnish-Website.

3. Varnish Cache Server bereitstellen

Umweltvorbereitung:

Drei CentOS 7.5-Server mit den IP-Adressen 192.168.20.5, 20.4 und 20.3;

Unter ihnen ist IP192.168.20.5 der Varnish-Cache-Server und die anderen beiden sind Backend-Webserver. Bereiten Sie für jeden eine andere Webseitendatei vor (ich ändere hier den Inhalt der Webseite in seine IP), um seinen Cache-Effekt zu überprüfen.

Laden Sie das von mir bereitgestellte Varnish-Quellpaket herunter und laden Sie es auf den Varnish-Server hoch.

1. Beginnen Sie mit der Bereitstellung und Installation von Varnish:

[root@varnish ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
: : : : : : : : : : : : : : :
#
# Dies ist eine Beispiel-VCL-Datei für Varnish.
#
# Es tut standardmäßig nichts und delegiert die Kontrolle an den
# eingebaute VCL. Die eingebaute VCL wird aufgerufen, wenn kein expliziter
# return-Anweisung.
#
# Siehe die VCL-Kapitel im Benutzerhandbuch unter https://www.varnish-cache.org/docs/
# und http://varnish-cache.org/trac/wiki/VCLExamples für weitere Beispiele.

# Markierung, die dem VCL-Compiler mitteilt, dass diese VCL angepasst wurde an die
# neues 4.0-Format.
vcl 4.0;
Importdirektoren;
std importieren;
# Standard-Backend-Definition. Legen Sie diese so fest, dass sie auf Ihren Inhaltsserver verweist.
Probe backend_healthcheck {
.url="/"; #Greifen Sie auf den Stammpfad des Backend-Servers zu.Intervall = 5s; #Anforderungszeitintervall.Timeout = 1s; #Anforderungs-Timeout.Fenster = 5; #Geben Sie die Anzahl der Abfragen 5-mal an.Schwellenwert = 3; #Wenn es 3 Fehler gibt, bedeutet dies, dass der Backend-Server ausgefallen ist}
backend web1 { #definieren Sie den Backend-Server.host = "192.168.20.4"; #IP oder Domänenname des Hosts (also des Backend-Hosts), der umgeleitet werden soll.port = "80"; #geben Sie die Portnummer des Backend-Servers an.probe = backend_healthcheck; #Healthcheck ruft den durch backend_healthcheck definierten Inhalt auf}
Backend Web2 {
.host = "192.168.20.3";   
.port = "80";
.probe = backend_healthcheck;
}
acl purgers { #Zugriffskontrollliste "127.0.0.1" definieren;
    "lokaler Host";
    "192.168.20.0/24";
    !"192.168.20.4";
}
sub vcl_init { #Rufen Sie vcl_init auf, um die Subroutine zu initialisieren und die Backend-Hostgruppe, d. h. die Direktoren, zu erstellen.
    new web_cluster = directors.round_robin(); #Verwenden Sie das neue Schlüsselwort, um ein Director-Objekt zu erstellen und verwenden Sie den Round_Robin-Algorithmus web_cluster.add_backend(web1); #Fügen Sie einen Back-End-Serverknoten hinzu web_cluster.add_backend(web2);
}
unter vcl_recv {
    set req.backend_hint = web_cluster.backend(); #Geben Sie den Backend-Knoten der Anforderung an web_cluster definierter Backend-Knoten if (req.method == "PURGE") { #Beurteilen Sie, ob der Anforderungsheader des Clients PURGE ist
        if (!client.ip ~ purgers) { #Wenn ja, prüfen Sie, ob die IP-Adresse des Clients in der ACL-Zugriffskontrollliste steht.
            return (synth(405, "Nicht zulässig.")); #Wenn nicht, gib einen 405-Statuscode an den Client zurück und gib die definierte Seite zurück.
    }
    return (purge); #Wenn es durch ACL definiert ist, wird es durch Purge behandelt.
}
wenn (req.method != "GET" &&
    req.method != "HEAD" &&
    Anforderungsmethode != "PUT" &&
    Anforderungsmethode != "POST" &&
    Anforderungsmethode != "TRACE" &&
    req.method != "OPTIONEN" &&
    req.method != "PATCH" &&
    req.method != "DELETE") { #Beurteilen Sie den Anforderungstyp des Clients return (Pipe);
    }
wenn (req.method != "GET" und req.method != "HEAD") {
    return (pass); #Wenn es nicht GET oder HEAD ist, übergeben Sie es.
}
wenn (req.url ~ "\.(php|asp|aspx|jsp|do|ashx|shtml)($|\?)") {
    return (pass); #Wenn der Client auf eine Datei mit der Endung .php zugreift, übergeben Sie sie zur Verarbeitung an „pass“.
}
wenn (req.http.Authorization) {
    return (pass); #Wenn der vom Client angeforderte Seitentyp eine Authentifizierung erfordert, übergeben Sie ihn an den Prozess}
wenn (req.http.Accept-Encoding) {
    if (req.url ~ "\.(bmp|png|gif|jpg|jpeg|ico|gz|tgz|bz2|tbz|zip|rar|mp3|mp4|ogg|swf|flv)$") {
    unset req.http.Accept-Encoding; #Stornieren Sie den vom Client empfangenen Komprimierungstyp} elseif (req.http.Accept-Encoding ~ "gzip") {
        set req.http.Accept-Encoding = "gzip"; #Wenn ein Gzip-Typ vorhanden ist, markieren Sie den Gzip-Typ.
    } elseif (req.http.Accept-Encoding ~ "deflate") {
        setze req.http.Accept-Encoding = "deflate";
    } anders {
    unset req.http.Accept-Encoding; #Andere undefinierte Seiten heben auch den vom Client empfangenen Komprimierungstyp auf.
    }
   }
if (req.url ~ "\.(css|js|html|htm|bmp|png|gif|jpg|jpeg|ico|gz|tgz|bz2|tbz|zip|rar|mp3|mp4|ogg|swf|flv)($|\?)") {
    unset req.http.cookie; #Den Cookie-Wert des Clients abbrechen.
    return (Hash); #Leitet die Anforderung an die Hash-Subroutine weiter, d. h. überprüft den lokalen Cache.
}
if (req.restarts == 0) { #Beurteilen Sie, ob es sich um die erste Anfrage vom Client handelt. if (req.http.X-Forwarded-For) { #Wenn es die erste Anfrage ist, legen Sie die IP-Adresse des Clients fest.
        setze req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
    } anders {
    setze req.http.X-Forwarded-For = client.ip;
    }
}
Rückgabe (Hash);
}
sub vcl_hash {
    hash_data(req.url); #Zeigen Sie die vom Client angeforderte Seite an und führen Sie ein Hashing durch
    wenn (req.http.host) {
        hash_data(req.http.host); #Host des Clients festlegen} else {
        hash_data(server.ip); #Server-IP festlegen
    }
    zurückgeben (nachschlagen);
}
unter vcl_hit {
    if (req.method == "PURGE") { #Wenn es HIT ist und der Client-Anforderungstyp PURGE ist, geben Sie den Statuscode 200 zurück und geben Sie die entsprechende Seite zurück.
        return (synth(200, "Gelöscht."));
    }
    zurückgeben (liefern);
}

unter vcl_miss {
  wenn (req.method == "PURGE") {
        return (synth(404, "Gelöscht.")); #Wenn es ein Fehler ist, gib 404 zurück
    }
    zurückgeben (holen);
}
unter vcl_deliver {
    if (Objekttreffer > 0) {
        set resp.http.CXK = "HIT-from-varnish"; #HTTP-Header festlegen X-Cache = Hit
        set resp.http.X-Cache-Hits = obj.hits; #Gibt die Anzahl der Befehle zurück} else {
    setze resp.http.X-Cache = "MISS";
    }
    unset resp.http.X-Powered-By; #Anzeige der Webversion abbrechenunset resp.http.Server; #Anzeige des Varnish-Dienstes abbrechenunset resp.http.X-Drupal-Cache; #Anzeige des zwischengespeicherten Frameworks abbrechenunset resp.http.Via; #Anzeige der Dateiinhaltsquelle abbrechenunset resp.http.Link; #Anzeige der HTML-Hyperlinkadresse abbrechenunset resp.http.X-Varnish; #Anzeige der Varnish-ID abbrechen
    set resp.http.xx_restarts_count = req.restarts; #Anzahl der Client-Anfragen festlegen set resp.http.xx_Age = resp.http.Age; #Länge der zwischengespeicherten Dateien anzeigen #set resp.http.hit_count = obj.hits; #Anzahl der Cache-Treffer anzeigen #unset resp.http.Age;
    zurückgeben (liefern);
}
unter vcl_pass {
    return (fetch); #Die vom Backend-Server zurückgegebenen Daten lokal zwischenspeichern}
unter vcl_backend_response {
    setze beresp.grace = 5m; #zusätzliche Nachfrist zwischenspeichernwenn (beresp.status == 499 || beresp.status == 404 || beresp.status == 502) {
        setze beresp.uncacheable = true; #Wenn der Backend-Server mit einem Statuscode von 449 usw. antwortet, nicht zwischenspeichern}
    wenn (bereq.url ~ "\.(php|jsp)(\?|$)") {
        setze beresp.uncacheable = true; #Wenn es eine PHP-Seite ist, wird sie nicht zwischengespeichert} else {
        wenn (bereq.url ~ "\.(css|js|html|htm|bmp|png|gif|jpg|jpeg|ico)($|\?)") {
        setze beresp.ttl = 15m; #Wenn es mit dem oben genannten endet, zwischenspeichere es für 15 Minuten unset beresp.http.Set-Cookie;
        } elseif (bereq.url ~ "\.(gz|tgz|bz2|tbz|zip|rar|mp3|mp4|ogg|swf|flv)($|\?)") {
            setze beresp.ttl = 30m; #Cache für 30 Minuten, setze beresp.http.Set-Cookie zurück;
        } anders {
            setze beresp.ttl = 10m; #Lebensdauer 10 Minuten, nicht gesetzt beresp.http.Set-Cookie;
        }
    }
    zurückgeben (liefern);
}
sub vcl_purge {
    return (Synth (200, "Erfolg"));
}
sub vcl_backend_error {
    wenn (beresp.status == 500 ||
        beresp.status == 501 ||
        beresp.status == 502 ||
        beresp.status == 503 ||
        beresp.status == 504) {
        return (Wiederholen); #Wenn der Statuscode einer der oben genannten ist, erneut anfordern}
}
sub vcl_fini {
    zurück (ok);
}
#Nach der Bearbeitung speichern und beenden.
[root@varnish-Lack]# varnishd -f /usr/local/var/varnish/example.vcl -s malloc,200M -a 0.0.0.0:80
#Starten Sie den Varnish-Dienst und lauschen Sie auf Port 80 aller lokalen IP-Adressen. -f gibt die VCL-Datei an und -s gibt die Kapazität für die Speicherung des Caches an. [root@varnish ~]# varnishlog #Nachdem Varnish gestartet wurde, können Sie diesen Befehl ausführen, um das Protokoll anzuzeigen.

Client-Zugriff zum Testen einiger Funktionen (drücken Sie vor dem Zugriff mit Google Chrome „F12“):

Drücken Sie "F5" zum Aktualisieren:

Es wird auf die in unserer Konfigurationsdatei angegebenen Header-Informationen zugegriffen und der Statuscode lautet 304.

Überprüfen Sie die ACL-Clear-Cache-Konfiguration:

Leeren Sie den Cache auf dem Host 192.168.20.4 (Varnish ist so konfiguriert, dass diese IP den Cache nicht leeren kann):

[root@localhost ~]# curl -X "PURGE" 192.168.20.5 #Varnish-Cache löschen

Sie erhalten die folgende Fehlermeldung:

Leeren Sie den Cache auf der von Varnish zugelassenen IP (Host 192.168.20.3). Sie sehen dann die folgende Erfolgsmeldung:

Zusätzlich:

Die vollständige, unkommentierte Konfigurationsdatei oben lautet wie folgt:

vcl 4.0;
Importdirektoren;
std importieren;
Probe backend_healthcheck {
.url="/"; 
.Intervall = 5s;
.Zeitüberschreitung = 1s;
.Fenster = 5; 
.Schwellenwert = 3; 
}
Backend web1 { 
.host = "192.168.20.4"; 
.port = "80"; 
.probe = backend_healthcheck; 
}
Backend Web2 {
.host = "192.168.20.3";   
.port = "80";
.probe = backend_healthcheck;
}
ACL-Plünderer { 
    "127.0.0.1";
    "lokaler Host";
    "192.168.20.0/24";
    !"192.168.20.4";
}
unter vcl_init { 
    neuer Webcluster = Direktoren.round_robin();
    web_cluster.add_backend(web1); 
    web_cluster.add_backend(web2);
}
unter vcl_recv {
    setze req.backend_hint = web_cluster.backend(); 
    wenn (req.method == "PURGE") { 
        wenn (!client.ip ~ purgers) {  
            return (synth(405, "Nicht zulässig.")); 
    }
    zurückgeben (bereinigen); 
}
wenn (req.method != "GET" &&
    req.method != "HEAD" &&
    Anforderungsmethode != "PUT" &&
    Anforderungsmethode != "POST" &&
    Anforderungsmethode != "TRACE" &&
    req.method != "OPTIONEN" &&
    req.method != "PATCH" &&
    req.method != "LÖSCHEN") {  
        Rücklauf (Rohr);
    }
wenn (req.method != "GET" und req.method != "HEAD") {
    Rückpass);
}
wenn (req.url ~ "\.(php|asp|aspx|jsp|do|ashx|shtml)($|\?)") {
    Rückpass); 
}
wenn (req.http.Authorization) {
    Rückpass); 
}
wenn (req.http.Accept-Encoding) {
    if (req.url ~ "\.(bmp|png|gif|jpg|jpeg|ico|gz|tgz|bz2|tbz|zip|rar|mp3|mp4|ogg|swf|flv)$") {
    req.http.Accept-Encoding aufheben; 
    } elseif (req.http.Accept-Encoding ~ "gzip") {
        setze req.http.Accept-Encoding = "gzip"; 
    } elseif (req.http.Accept-Encoding ~ "deflate") {
        setze req.http.Accept-Encoding = "deflate";
    } anders {
    req.http.Accept-Encoding aufheben;
    }
   }
if (req.url ~ "\.(css|js|html|htm|bmp|png|gif|jpg|jpeg|ico|gz|tgz|bz2|tbz|zip|rar|mp3|mp4|ogg|swf|flv)($|\?)") {
    req.http.cookie nicht gesetzt; 
    Rückgabe (Hash);  
}
wenn (req.restarts == 0) { 
    wenn (req.http.X-Forwarded-For) {  
        setze req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
    } anders {
    setze req.http.X-Forwarded-For = client.ip;
    }
}
Rückgabe (Hash);
}
sub vcl_hash {
    hash_data(erforderliche URL); 
    wenn (req.http.host) {
        hash_data(req.http.host); 
    } anders {
        hash_data(server.ip); 
    }
    zurückgeben (nachschlagen);
}
unter vcl_hit {
    wenn (req.method == "PURGE") { 
        return (synth(200, "Gelöscht."));
    }
    zurückgeben (liefern);
}

unter vcl_miss {
  wenn (req.method == "PURGE") {
        return (synth(404, "Gelöscht."));
    }
    zurückgeben (holen);
}
unter vcl_deliver {
    if (Objekttreffer > 0) {
        setze resp.http.CXK = "HIT-aus-Lack";
        setze resp.http.X-Cache-Hits = obj.hits; 
    } anders {
    setze resp.http.X-Cache = "MISS";
    }
    nicht gesetzt bzw. http.X-Powered-By; 
    nicht gesetzt bzw. http.Server;  
    nicht gesetzt bzw. http.X-Drupal-Cache; 
    nicht gesetzt bzw. http.Via; 
    nicht gesetzt bzw. http.Link; 
    nicht gesetzt bzw. http.X-Varnish; 
    setze resp.http.xx_restarts_count = req.restarts; 
    setze resp.http.xx_Age = resp.http.Age; 
    #set resp.http.hit_count = obj.hits; 
    #unset bzw.http.Alter;
    zurückgeben (liefern);
}
unter vcl_pass {
    zurückgeben (holen); 
}
unter vcl_backend_response {
    setze beresp.grace = 5m; 
    wenn (beresp.status == 499 || beresp.status == 404 || beresp.status == 502) {
        setze beresp.uncacheable = true;
    }
    wenn (bereq.url ~ "\.(php|jsp)(\?|$)") {
        setze beresp.uncacheable = true; 
    } anders {
        wenn (bereq.url ~ "\.(css|js|html|htm|bmp|png|gif|jpg|jpeg|ico)($|\?)") {
        setze beresp.ttl = 15m; 
        nicht gesetzt, beresp.http.Set-Cookie;
        } elseif (bereq.url ~ "\.(gz|tgz|bz2|tbz|zip|rar|mp3|mp4|ogg|swf|flv)($|\?)") {
            setze beresp.ttl = 30m;
            nicht gesetzt, beresp.http.Set-Cookie;
        } anders {
            setze beresp.ttl = 10m;
            nicht gesetzt, beresp.http.Set-Cookie;
        }
    }
    zurückgeben (liefern);
}
sub vcl_purge {
    return (Synth (200, "Erfolg"));
}
sub vcl_backend_error {
    wenn (beresp.status == 500 ||
        beresp.status == 501 ||
        beresp.status == 502 ||
        beresp.status == 503 ||
        beresp.status == 504) {
        Rückkehr (Wiederholen); 
    }
}
sub vcl_fini {
    zurück (ok);
}

Wenn Sie die Cache-Funktion von Varnish implementieren möchten, können Sie dies tatsächlich über die folgende grundlegende Definition tun (der folgende Inhalt in der Datei example.vcl ist ausreichend):

vcl 4.0;

Importdirektoren;
Probe backend_healthcheck {
    .url = "/";
    .Zeitüberschreitung = 1s;
    .Intervall = 5s;
    .Fenster = 5;
    .Schwellenwert = 3;
}
Backend web1 {
    .host = "192.168.20.3";
    .port = "80";
    .probe = backend_healthcheck;
}
Backend Web2 {
    .host = "192.168.20.4";
    .port = "80";
    .probe = backend_healthcheck;
}
unter vcl_init {
    neuer Webcluster = Direktoren.round_robin();
    web_cluster.add_backend(web1);
    web_cluster.add_backend(web2);
}
unter vcl_recv {
    setze req.backend_hint = web_cluster.backend();
}

Zusammenfassen

Oben finden Sie eine Einführung in die Varnish-Cache-Serverfunktion, die in CentOS 7.5 bereitgestellt wird. Ich hoffe, dass es Ihnen hilfreich sein wird. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!
Wenn Sie diesen Artikel hilfreich finden, können Sie ihn gerne abdrucken und dabei bitte die Quelle angeben. Vielen Dank!

Das könnte Sie auch interessieren:
  • Verwenden von Varnish zum Trennen statischer und dynamischer Websites basierend auf CentOS 6.5
  • So ändern Sie die CentOS-Serverzeit auf die Peking-Zeit
  • Detaillierte Schritte zum Erstellen eines Git-Servers unter CentOS
  • Installations- und Konfigurationscode von Apache, PHP7 und MySQL5.7 im CentOS7-Server
  • CentOS 6.5 Webserver Apache-Installation und Grundeinstellungen
  • Detaillierte Schritte zur Installation und Bereitstellung eines Mailservers (Postfix) unter CentOS 7.2
  • Detaillierte Erklärung zum Erstellen eines DNS-Servers unter CentOS7.0
  • Detaillierte Erläuterung der Bereitstellung eines Node.js-Projekts auf dem Alibaba Cloud Server (CentOs)
  • CentOS7 + node.js + nginx + MySQL-Server-Erstellungsprozess

<<:  js, um die vollständigen Schritte der Konvertierung von Chinesisch nach Pinyin durchzuführen

>>:  So sichern und wiederherstellen Sie die MySQL-Datenbank, wenn sie zu groß ist

Artikel empfehlen

Detaillierte Erklärung, wie Sie alle untergeordneten Elemente mit CSS auswählen

Wie wähle ich mit CSS rekursiv alle untergeordnet...

Verwendung und Beispiele für Linux-Befehle zur Echotextverarbeitung

Die Beschreibung von echo im Linux-Hilfedokument ...

JavaScript-Methode zum Erkennen des Dateityps

Inhaltsverzeichnis 1. So zeigen Sie die Binärdate...

Was ist Makefile in Linux? Wie funktioniert es?

Führen Sie Ihre Programme mit diesem praktischen ...

Linux: Kein Speicherplatz mehr auf Gerät 500 – Fehler aufgrund voller Inodes

Was ist ein Inode? Um Inode zu verstehen, müssen ...

So implementieren Sie Leerzeichen in Taobao mit CSS3

Machen Sie einen leeren Bereich für Taobao: Wenn ...

Erläuterung des Problems bei der Auswahl des MySQL-Speicherzeittyps

Der datetime-Typ wird normalerweise zum Speichern...

Beispiel einer Skriptmethode für die Bindung von Linux-Dualnetzwerkkarten

Bei der Bedienung und Konfiguration von Linux wir...

Konvertieren Sie ausgeschnittene PSD-Bilder in das Div+CSS-Format

Beispiel für das Zuschneiden einer Webseite von P...

Die Aktualisierung der Seite zur Formularübermittlung springt nicht

1. Quellcode entwerfen Code kopieren Der Code laut...

HTML-Tutorial: Sortierte Listen

<br />Originaltext: http://andymao.com/andy/...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.22

Installation und Konfiguration von MySQL8.0.22 (s...

HTML realisiert Echtzeit-Überwachungsfunktion der Hikvision-Kamera

Das Unternehmen hat vor Kurzem einige CCFA-Aktivi...