Zwei Module zur Verwendung von nginx zum Lastenausgleich:
Interpretation des Upstreammoduls Die Lastausgleichsfunktion von nginx hängt vom Modul ngx_http_upstream_module ab. Die unterstützten Proxy-Methoden sind proxy_pass (im Allgemeinen für Reverse-Proxy verwendet), fastcgi_pass (im Allgemeinen für die Interaktion mit dynamischen Programmen verwendet), memcached_pass, proxy_next_upstream, fastcgi_next_pass, memcached_next_pass. Das Upstream-Modul sollte innerhalb des http{}-Tags platziert werden. Modul schreiben: Upstream-Backend { ip_hash; Server backend1.example.com Gewicht=5; Server backend2.example.com:8080; Server-Backup1.example.com:8080-Backup; Server-Backup2.example.com:8080-Backup; } Beispiel 1: Upstream-Dynamik Zone Upstream_Dynamic 64k; Server backend1.example.com Gewicht=5; Server backend2.example.com:8080 Fail_Timeout=5s langsamer_Start=30s; Server 192.0.2.1 max_fails=3; Server backend3.example.com auflösen; Server-Backup1.example.com:8080-Backup; Server-Backup2.example.com:8080-Backup; } Syntaxerklärung: Nginx unterstützt standardmäßig vier Planungsalgorithmen
So schreiben Sie ein Servermodul Server-IP-Planungsstatus Die Serverdirektive gibt die IP-Adresse und den Port des Backend-Servers an und kann auch den Status jedes Backend-Servers in der Lastausgleichsplanung festlegen.
fail_timeout, die Zeit bis zur Unterbrechung des Dienstes nach max_fails-Fehlern. JD.com ist 3s, ChinaCache ist 3s, konfiguriert entsprechend den Geschäftsanforderungen. 2-3 Sekunden sind für Routinegeschäfte angemessen. Wenn der Server eine Verbindung zu einem Domänennamen herstellt, ist ein DNS-Server im Intranet erforderlich, oder die Domänennamenauflösung wird in der Hosts-Datei des Load Balancers durchgeführt. Der Server kann auch direkt an den IP- oder IP-Plus-Port angeschlossen werden. Lange Verbindung Keepalive Upstream-Backend { Server backend2.example.com:8080; Server-Backup1.example.com:8080-Backup; Keepalive 100; } Diese Anweisung konfiguriert die maximale Anzahl inaktiver Verbindungen, die jeder Arbeitsprozess beim Upstreamserver zwischenspeichern kann. Standort / { # Unterstützt Keep-Alive Proxy_http_Version 1.1; proxy_set_header Verbindung ""; Proxy-Passwort http://Backup; }
Empfehlungen zur Verbindungspoolkonfiguration
Der Pool der inaktiven Verbindungen ist zu klein, die Verbindungen reichen nicht aus und es müssen kontinuierlich neue Verbindungen hergestellt werden. Interpretation des Standortmoduls Standortfunktion: Legen Sie die URI basierend auf einer Anweisung fest. Grundlegende Syntax: Syntax: Standort [ = | ~ | ~* | ^~ ] uri { ... } Standort @name { ... } Standard: - Kontext: Server, Standort
Der Abgleich erfolgt nach Priorität und nicht entsprechend der Nginx-Konfigurationsdatei. Offizielles Beispiel: Standort = / { [ Konfiguration A ] } Standort / { [ Konfiguration B ] } Standort /Dokumente/ { [ Konfiguration C ] } Standort ^~ /images/ { [ Konfiguration D ] } Standort ~* \.(gif|jpg|jpeg)$ { [ Konfiguration E ] } abschließend:
Testbeispiel: Standort / { Rückgabe 401; } Standort = / { Rückgabe 402; } Standort /Dokumente/ { Rückgabe 403; } Standort ^~ /images/ { Rückgabe 404; } Standort ~* \.(gif|jpg|jpeg)$ { 500 zurückgeben; } Testergebnisse (Schwerpunkt): [root@lb01 conf]# curl -I -s -o /dev/null -w "%{http_code}\n" http://10.0.0.7/ 402 [root@lb01 conf]# curl -I -s -o /dev/null -w "%{http_code}\n" http://10.0.0.7/index.html 401 [root@lb01 conf]# curl -I -s -o /dev/null -w "%{http_code}\n" http://10.0.0.7/documents/document.html 403 [root@lb01 conf]# curl -I -s -o /dev/null -w "%{http_code}\n" upload/2022/web/1.gif 404 [root@lb01 conf]# curl -I -s -o /dev/null -w "%{http_code}\n" upload/2022/web/1.gif 500 Zusammenfassung der Ergebnisse: Reihenfolge der Übereinstimmungspriorität, =>^~ (stimmt mit einem festen String überein, reguläre Ausdrücke werden ignoriert) > völlig gleich >~* > leer >/. Versuchen Sie, beim Arbeiten '=' voranzustellen Erläuterung des Proxy_pass-Moduls Die Direktive proxy_pass gehört zum Modul ngx_http_proxy_module, das Anfragen an einen anderen Server weiterleiten kann. Schreibmethode: Beispiel 1: Upstream blog_real_servers { Server 10.0.0.9:80 Gewicht=5; Server 10.0.0.10:80 Gewicht=10; Server 10.0.0.19:82 Gewicht=15; } Server { hören Sie 80; Servername blog.etiantian.org; Standort / { Proxy-Passwort http://blog_real_servers; Proxy_Set_Header-Host $host; } }
Konfigurieren Sie den Backend-Server so, dass er die echte Frontend-IP erhält Die Konfiguration ist wie folgt: log_format commonlog '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; httpd.conf-Konfiguration des rs_apache-Knotens LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{U ser-Agent}i\"" kombinierte ändern Protokollierung Apache LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b" allgemein Optimierungsparameter im Zusammenhang mit proxy_pass
Gesundheitscheck Nginx stellt die Anweisung health_check bereit, um während des Ladens (Upstream) einen wichtigen Mechanismus zur Integritätsprüfung bereitzustellen (Hinweis: Diese Anweisung muss im Standortkontext festgelegt werden). Unterstützte Parameter sind:
Eine einfache Einrichtung sieht wie folgt aus und verwendet die Standardwerte: Standort / { Proxy-Passwort http://backend; Gesundheitscheck; } Für die Anwendung können wir eine dedizierte API zur Integritätsprüfung definieren: /api/health_check, und nur den HTTP-Statuscode 200 zurückgeben. Und stellen Sie den Intervallwert zwischen zwei Prüfungen auf 1 Sekunde ein. Somit sieht die Konfiguration der health_check-Anweisung wie folgt aus: health_check uri="/api/health_check" Intervall; Matching-Methode http { Server { ... Standort / { Proxy-Passwort http://backend; health_check match=willkommen; } } Spiel willkommen { Status 200; Header-Inhaltstyp = Text/HTML; body ~ "Willkommen bei nginx!"; } } Übereinstimmungsbeispiel
Eine vollständige Nginx-Instanz [root@lb01 conf]# cat nginx.conf Arbeiterprozesse 1; Ereignisse { Arbeiterverbindungen 1024; } http { mime.types einschließen; Standardtyp Anwendung/Oktett-Stream; sendfile an; KeepAlive-Timeout 65; #blog lb von oldboy um 201303 Upstream blog_real_servers { Server 10.0.0.9:80 Gewicht=1 max_fails=1 Fail_Timeout=10s; Server 10.0.0.10:80 Gewicht=1 max_fails=2 Fail_Timeout=20s; } Server { hören Sie 80; Servername blog.etiantian.org; Standort / { Proxy-Passwort http://blog_real_servers; proxy.conf einschließen; } } } [root@lb01 conf]# cat proxy.conf Proxy_Set_Header Host $host; proxy_set_header X-Weitergeleitet-Für $remote_addr; Proxy_Verbindungstimeout 90; Proxy_Sendezeitüberschreitung 90; Proxy_Lese_Timeout 90; Proxy-Puffergröße 4k; Proxy-Puffer 4 32k; Proxy_Busy_Buffer_Größe 64k; Proxy_Temp_File_Schreibgröße 64k; Erweiterungen Für Anfragen dürfen nur die Methoden GET, HEAD und POST verwendet werden ## Erlaube nur diese Anfragemethoden ## wenn ($request_method !~ ^(GET|HEAD|POST)$ ) { Rückgabe 444; } Tatsächlicher Kampf Trennen Sie statische und dynamische Daten basierend auf URI und Standort. Endgültige Umsetzung:
[root@lb01 conf]# cat nginx.conf Arbeiterprozesse 1; Ereignisse { Arbeiterverbindungen 1024; } http { mime.types einschließen; Standardtyp Anwendung/Oktett-Stream; sendfile an; KeepAlive-Timeout 65; #blog lb von oldboy um 201303 vorgelagerte statische_Pools { Server 10.0.0.9:80; } Upstream dynamische_Pools { Server 10.0.0.10:80; } Upstream-Uploadpools { Server 10.0.0.9:80; } Server { hören Sie 80; Servername blog.biglittleant.cn; Standort / { Proxy-Passwort http://static_pools; proxy.conf einschließen; } Standort /static/ { Proxy-Passwort http://static_pools; proxy.conf einschließen; } Standort ~* \.(gif|jpg|jpeg)$ { Proxy-Passwort http://static_pools; proxy.conf einschließen; } Standort /dynamisch/ { Proxy-Passwort http://dynamische_Pools; proxy.conf einschließen; } Standort /upload/ { Proxy-Passwort http://upload_pools; proxy.conf einschließen; } } } Implementieren Sie unterschiedliche Adressen für Apple- und Android-Telefone Server { hören Sie 80; Servername blog.etiantian.org; Standort / { wenn ($http_user_agent ~* "android") { Proxy-Passwort http://android_pools; } wenn ($http_user_agent ~* "iphone") { Proxy-Passwort http://iphone_pools; } Proxy-Passwort http://pc_pools; extra/proxy.conf einschließen; } Zugriff_Abmeldung; } Referenzdokumentation Offizielle Website von nginx-proxy_pass Dies ist das Ende dieses Artikels über die Verwendung von nginx zur Interpretation von Lastausgleichsmodulen. Weitere relevante Inhalte zum Lastausgleich von nginx finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Einführung und Zusammenfassung der MySQL 8.0-Fensterfunktionen
>>: Detaillierte Erläuterung des Problemfalls beim Löschen des Vue KeepAlive-Cache
Algorithmus zum Ersetzen von Seiten: Das Wesentli...
Nachdem ich fast zwei Tage lang mit dem domänenüb...
Inhaltsverzeichnis 1 Hintergrund 2 Erstellen Sie ...
1. Die Beziehung zwischen Schriftarten und Zeiche...
In diesem Artikel gibt es keine Spitzfindigkeiten,...
Im Bereich der Datenanalyse sind Datenbanken unse...
Heute werde ich ein kleines Javascript-Animations...
Die aktuellste Version von CentOS ist CentOS 8. A...
Inhaltsverzeichnis 1. Einführung in Portainer 2. ...
Es ist wirklich nicht einfach, eine gute Rekonstr...
In diesem Artikel wird der spezifische Code für J...
1. Einzelne Tabellenabfrage -> Update UPDATE T...
Inhaltsverzeichnis 1. Was ist Bubble Sort 2. Gebe...
Vorwort Tomcat ist ein hervorragender Java-Contai...
Inhaltsverzeichnis Warum brauchen wir Docker? Bei...