Wir alle wissen, dass die Leistung von Anwendungen und Websites ein entscheidender Faktor für ihren Erfolg ist. Es ist jedoch nicht immer klar, wie Sie die Leistung Ihrer App oder Website verbessern können. Codequalität und Infrastruktur sind natürlich von entscheidender Bedeutung, aber in vielen Fällen können Sie das Endbenutzererlebnis Ihrer Anwendung erheblich verbessern, indem Sie sich auf einige sehr grundlegende Techniken zur Anwendungsbereitstellung konzentrieren. Ein Beispiel ist die Implementierung und Optimierung des Caching in einem Anwendungsstapel. Die in diesem Tutorial vorgestellten Techniken können sowohl Anfängern als auch fortgeschrittenen Benutzern helfen, die in Nginx enthaltenen Funktionen zum Zwischenspeichern von Inhalten zu nutzen, um eine bessere Leistung zu erzielen. Überblick Ein Inhaltscache befindet sich zwischen dem Client und dem Ursprungsserver (Upstream) und speichert eine Kopie aller Inhalte, die er sieht. Wenn ein Client Inhalte anfordert, die bereits im Cache gespeichert sind, gibt er die Inhalte direkt zurück, ohne Kontakt mit dem Ursprungsserver aufzunehmen. Dies verbessert die Leistung, da der Inhalt näher am Client zwischengespeichert wird, und ermöglicht eine effizientere Nutzung der Anwendungsserver, da diese die Seite nicht jedes Mal von Grund auf neu generieren müssen. Zwischen dem Webbrowser und dem Anwendungsserver können mehrere Caches vorhanden sein: der Browser-Cache des Clients, Zwischen-Caches, Content Delivery Networks (CDNs) und Load Balancer oder Reverse-Proxys, die dem Anwendungsserver vorgeschaltet sind. Sogar auf der Ebene des Reverse-Proxys/Load Balancers kann die Leistung durch Caching erheblich verbessert werden. Hier ist ein Beispiel. Meine Site verwendet Next.js Server-Port-Rendering. Da die Serverleistung relativ schlecht ist, kann man natürlich nicht erwarten, dass sie für einen 5-Dollar-Server so gut ist. Es ist schon sehr bemerkenswert, dass es verwendet werden kann. Es ist gut genug, um auf dieses LAN zugreifen zu können. Erwarten Sie nicht zu viel. Das Öffnen der Seite dauert jedes Mal etwa 7 Sekunden, einschließlich Netzwerklatenz. Wenn ich jedoch direkt beim Server (127.0.0.1) eine Anfrage stelle, dauert es fast 5 Sekunden. Wenn man dann die Zeit zum Abrufen der Daten aus der Datenbank ausschließt, dauert das Rendern auf der Serverseite 4,5 Sekunden, was zu langsam ist. Im Moment ist Caching die schnellste Lösung, die mir einfällt, aber das Hinzufügen von Caching dort ist, gemessen an der Zeit jedes Schritts, der schnellste Weg, das Problem zu lösen. Nginx wird häufig als Reverse-Proxy oder Load Balancer in einem Anwendungsstapel eingesetzt und verfügt über einen vollständigen Satz an Caching-Funktionen. Im Folgenden besprechen wir, wie man das grundlegende Caching mit Nginx konfiguriert. Einrichten und Konfigurieren des grundlegenden Cachings Zum Aktivieren des grundlegenden Caching sind nur zwei Anweisungen erforderlich: proxy_cache_path und proxy_cache. Die Direktive „proxy_cache_path“ legt den Pfad und die Konfiguration des Caches fest und die Direktive „proxy_cache“ wird verwendet, um ihn zu aktivieren. proxy_cache_path /Pfad/zum/Cache levels=1:2 keys_zone=my_cache:10m max_size=10g inaktiv=60 m use_temp_path=aus; Server { # ... Standort / { Proxy-Cache mein_Cache; Proxy-Passwort http://mein_Upstream; } } Die Parameter der Direktive „proxy_cache_path“ definieren die folgenden Einstellungen: Das zwischengespeicherte lokale Festplattenverzeichnis heißt /Pfad/zum/Cache/.
Schließlich aktiviert die Direktive „proxy_cache“ das Caching für alle Inhalte, die mit der URL des übergeordneten Standortblocks (/ im Beispiel) übereinstimmen. Sie können auch eine Proxy_Cache-Direktive in einen Serverblock aufnehmen. Sie gilt für alle Blöcke des Servers, die keine eigenen Standortdirektiven haben. Zwischengespeicherte Inhalte bereitstellen, wenn der Upstream-Server ausgefallen ist() Eine leistungsstarke Funktion der Inhaltszwischenspeicherung von Nginx besteht darin, dass Nginx so konfiguriert werden kann, dass zwischengespeicherte Inhalte aus dem Cache bereitgestellt werden, wenn vom Ursprungsserver keine neuen Inhalte abgerufen werden können. Dies kann passieren, wenn alle Ursprungsserver, die eine Ressource zwischenspeichern, ausgefallen oder vorübergehend belegt sind. Anstatt den Fehler an den Client weiterzugeben, stellt Nginx die veraltete Version der Datei aus dem Cache bereit. Dies bietet zusätzliche Fehlertoleranz für Nginx-Proxy-Server und gewährleistet Betriebszeit im Falle von Serverausfällen oder Verkehrsspitzen. Um diese Funktion zu aktivieren, fügen Sie die Direktive proxy_cache_use_stale ein: Standort / { # ... proxy_cache_use_stale Fehler Timeout http_500 http_502 http_503 http_504; } Wenn Nginx bei dieser Beispielkonfiguration einen Fehler, eine Zeitüberschreitung oder einen der angegebenen 5xx-Fehler vom Ursprungsserver empfängt und eine veraltete Version der angeforderten Datei in seinem Cache hat, liefert es die veraltete Datei, anstatt den Fehler an den Client weiterzuleiten. So verbessern Sie die Cache-Leistung Nginx verfügt über eine Vielzahl optionaler Einstellungen, mit denen die Leistung des Caches optimiert werden kann. Hier ist ein Beispiel für die Aktivierung einiger davon: proxy_cache_path /Pfad/zum/Cache levels=1:2 keys_zone=my_cache:10m max_size=10g inaktiv=60 m use_temp_path=aus; Server { # ... Standort / { Proxy-Cache mein_Cache; proxy_cache_revalidate ein; Proxy_Cache_Min.-Verwendung: 3; proxy_cache_use_stale Fehler Timeout Aktualisierung http_500 http_502 http_503 http_504; proxy_cache_background_update ein; proxy_cache_lock aktiviert; Proxy-Passwort http://mein_Upstream; } } Diese Anweisungen konfigurieren die folgenden Verhaltensweisen:
Aufteilen des Cache auf mehrere Festplatten Wenn Sie über mehrere Festplatten verfügen, können Sie den Cache mit Nginx zwischen ihnen aufteilen. Das folgende Beispiel verteilt die Clients basierend auf der Anforderungs-URI gleichmäßig auf zwei Festplatten: proxy_cache_path /Pfad/zu/hdd1 levels=1:2 keys_zone=my_cache_hdd1:10m max_size=10g inaktiv=60m use_temp_path=aus; proxy_cache_path /Pfad/zu/hdd2 levels=1:2 keys_zone=my_cache_hdd2:10m max_size=10g inaktiv=60m use_temp_path=aus; split_clients $request_uri $my_cache { 50 % „my_cache_hdd1“; 50 % „my_cache_hdd2“; } Server { # ... Standort / { Proxy-Cache $mein_Cache; Proxy-Passwort http://mein_Upstream; } } Die beiden proxy_cache_path-Direktiven definieren zwei Caches (my_cache_hdd1 und my_cache_hdd2) auf zwei verschiedenen Festplatten. Der Konfigurationsblock split_clients gibt an, dass die Hälfte der Anfragen (also 50 %) in my_cache_hdd1 und die andere Hälfte in my_cache_hdd2 zwischengespeichert wird. Welcher Cache verwendet wird, wird für jede Anfrage anhand eines Hashs der Variable „$request_uri“ (der Anfrage-URI) bestimmt, mit dem Ergebnis, dass Anfragen für eine bestimmte URI immer im selben Cache zwischengespeichert werden. Bitte beachten Sie, dass diese Methode kein Ersatz für eine RAID-Festplattenkonfiguration ist. Wenn ein Festplattenfehler auftritt, kann dies zu unvorhersehbarem Systemverhalten führen. Unter anderem kann es vorkommen, dass Benutzern bei Anfragen an die ausgefallene Festplatte ein 500-Antwortcode angezeigt wird. Eine ordnungsgemäße RAID-Laufwerkkonfiguration kann Laufwerksausfälle bewältigen. So erkennen Sie den Nginx-Cache Sie können die Variable $upstream_cache_status zur Erkennung zum Antwortheader hinzufügen add_header X-Cache-Status $upstream_cache_status; Dieses Beispiel fügt der Antwort an den Client den HTTP-Header „X-Cache-Status“ hinzu. Folgendes sind die möglichen Werte für $upstream_cache_status:
So bestimmt Nginx, ob eine Antwort zwischengespeichert werden soll Standardmäßig respektiert Nginx den Cache-Control-Header des Ursprungsservers. Es werden keine Antworten zwischengespeichert, bei denen Cache-Control im Antwortheader auf „Private“, „No-Cache“ oder „No-Store“ oder „Set-Cookie“ eingestellt ist. Nginx speichert nur GET- und HEAD-Clientanforderungen im Cache. Sie können diese Standardeinstellungen wie in den Antworten unten beschrieben überschreiben. Wenn „Proxy_Buffering“ deaktiviert ist, speichert Nginx die Antworten nicht im Cache. Ein Die Standardeinstellung. Kann Nginx Cache-Control ignorieren Verwenden Sie die Direktive proxy_ignore_headers, um Cache-Control zu ignorieren Standort /Bilder/ { Proxy-Cache mein_Cache; proxy_ignore_headers Cache-Steuerung; proxy_cache_valid alle 30 m; # ... } Nginx ignoriert Cache-Control-Header für alles unter /images/. Diese Anweisung erzwingt den Ablauf zwischengespeicherter Daten, was erforderlich ist, wenn der Header ignoriert wird. Nginx speichert keine Dateien im Cache, die nicht abgelaufen sind. Kann Nginx Set-Cookie ignorieren Verwenden Sie die Direktive proxy_ignore_headers. So cachen Sie POST-Anfragen in Nginx Verwenden Sie die Direktive proxy_cache_methods: Proxy_Cache_Methoden: Kopf-Beitrag abrufen; Dieses Beispiel aktiviert die Zwischenspeicherung für POST-Anfragen. Wie Nginx dynamische Inhalte zwischenspeichert, sofern der Cache-Control-Header dies zulässt. Durch das Zwischenspeichern dynamischer Inhalte, selbst für einen kurzen Zeitraum, kann die Belastung der Ursprungsserver und Datenbanken verringert werden. Dadurch verbessert sich die Zeit bis zum ersten Byte, da die Seite nicht für jede Anforderung neu generiert werden muss. So deaktivieren Sie den Nginx-Cache Die Direktive proxy_cache_bypass Standort / { Proxy-Cache-Bypass $cookie_nocache $arg_nocache; # ... } Diese Anweisung definiert die Anforderungstypen, für die Nginx sofort Inhalte vom Ursprungsserver anfordern soll, anstatt zuerst zu versuchen, sie im Cache zu finden. Dies wird manchmal als „Loch in den Cache schlagen“ bezeichnet. Welchen Cache-Schlüssel verwendet Nginx? Die Standardform des von Nginx generierten Schlüssels sieht aus wie der MD5-Hash der folgenden Nginx-Variable: $scheme$proxy_host$request_uri; der tatsächlich verwendete Algorithmus ist etwas komplizierter. proxy_cache_path /Pfad/zum/Cache levels=1:2 keys_zone=my_cache:10m max_size=10g inaktiv=60 m use_temp_path=aus; Server { # ... Standort / { Proxy-Cache mein_Cache; Proxy-Passwort http://mein_Upstream; } } Für diese Beispielkonfiguration wird der Cache-Schlüssel http://www.example.org/my_image.jpg als md5("http://my_upstream:80/my_image.jpg") berechnet. Beachten Sie, dass die Variable „proxy_host“ für den Hashwert und nicht für den tatsächlichen Hostnamen (www.example.com) verwendet wird. „proxy_host“ wird als Name und Port des Proxyservers definiert, der in der Direktive „proxy_pass“ angegeben ist. Um die als Grundlage für den Schlüssel verwendete Variable zu ändern, verwenden Sie die Direktive proxy_cache_key. Verwenden eines Cookies als Teil meines Cache-Schlüssels Der Cache-Schlüssel kann mit einem beliebigen Wert konfiguriert werden, zum Beispiel: Proxy-Cache-Schlüssel $Proxy-Host$Request-URI$Cookie-Jessionid; Dieses Beispiel integriert den Wert des JSESSIONID-Cookies in den Cache-Schlüssel. Elemente mit derselben URI, aber unterschiedlichen JSESSIONID-Werten werden separat als eindeutige Elemente zwischengespeichert. Nginx verwendet den ETag-Header In Nginx 1.7.3 und höher unterstützt der ETag-Header vollständig If-None-Match. Wie Nginx Bytebereichsanforderungen verarbeitet Wenn die Datei im Cache neu ist, berücksichtigt Nginx die Bytebereichsanforderung und stellt dem Client nur die angegebenen Bytes des Elements zur Verfügung. Wenn die Datei nicht zwischengespeichert ist oder veraltet ist, lädt Nginx die gesamte Datei vom Ursprungsserver herunter. Wenn die Anforderung einen einzelnen Bytebereich betrifft, sendet Nginx diesen Bereich an den Client, sobald es ihn im Download-Stream findet. Wenn die Anforderung mehrere Bytebereiche in derselben Datei angibt, liefert Nginx dem Client die gesamte Datei, wenn der Download abgeschlossen ist. Sobald der Download abgeschlossen ist, verschiebt Nginx die gesamte Ressource in den Cache, sodass alle zukünftigen Bytebereichsanforderungen, unabhängig davon, ob es sich um einen einzelnen Bereich oder mehrere Bereiche handelt, sofort aus dem Cache erfüllt werden. Beachten Sie, dass der Upstream-Server Bytebereichsanforderungen unterstützen muss, damit Nginx Bytebereichsanforderungen an diesen Upstream-Server unterstützen kann. Wie Nginx den Pragma-Header verarbeitet Der Header Pragma:no-cache wird vom Client hinzugefügt, um Inhalte anzufordern, die alle Zwischencaches umgehen und direkt an den Ursprungsserver gehen. Standardmäßig unterstützt Nginx den Pragma-Header nicht, aber Sie können diese Funktionalität mit der Direktive proxy_cache_bypass konfigurieren: Standort /Bilder/ { Proxy-Cache mein_Cache; Proxy_Cache_Bypass $http_pragma; # ... } Unterstützt Nginx die Header stale-while-revalidate und stale-if-error und erweiterte Cache-Control Unterstützt in Nginx 1.11.10 und höher. Was diese Erweiterungen bewirken: Erweiterung des Cache-Control-HTTP-Headers, um die Verwendung einer veralteten zwischengespeicherten Antwort zu ermöglichen, wenn diese gerade aktualisiert wird. Die Stale-if-Error-Erweiterung des Cache-Control-HTTP-Headers ermöglicht die Verwendung einer veralteten zwischengespeicherten Antwort, wenn ein Fehler auftritt. Diese Header haben eine niedrigere Priorität als die oben beschriebene Direktive „proxy_cache_use_stale“. Unterstützt Nginx Vary-Header? Der Vary-Header wird in Nginx 1.7.7 und höher unterstützt. abschließend An diesem Punkt sollten Sie ein gutes Verständnis davon haben, wie der Nginx-Proxy-Cache funktioniert und wie Sie ihn richtig konfigurieren. Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen. Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Verwenden von React+Redux zum Implementieren der Zählerfunktion und aufgetretene Probleme
>>: Beispielcode für das Testskript für Indizes und Sperren auf den Isolationsebenen RR und RC
Inhaltsverzeichnis 01 Einführung in Atomic DDL 02...
Das Problem beim Zurücksetzen des Passworts für d...
Anforderung: Manchmal, wenn der Seiteninhalt kurz...
Es gibt zwei Arten von Linux-Systemzeiten. (1) Ka...
Es besteht ein Unterschied zwischen src und href ...
Kernel: [root@opop ~]# cat /etc/centos-release Ce...
Vorwort Im vorherigen Artikel wurde die Installat...
Inhaltsverzeichnis JVM-Klassenlader Tomcat-Klasse...
1. Ändern Sie die Hardwareversion der virtuellen ...
Inhaltsverzeichnis 1. Was ist Dockerfile? 2. Anal...
Inhaltsverzeichnis Was ist eine Voranalyse? Der U...
Inhaltsverzeichnis Vorwort 1. So stornieren Sie e...
BMP ist ein von Hardwaregeräten unabhängiges und ...
Geschichte von ZFS Das Z-Dateisystem (ZFS) wurde ...
Inhaltsverzeichnis 1. Vorwort 2. Finden Sie zwei ...