Nginx-Reverseproxy und Lastausgleichspraxis

Nginx-Reverseproxy und Lastausgleichspraxis

Reverse-Proxy

Unter Reverse-Proxy versteht man den Empfang der Zugriffsanforderung des Benutzers über einen Proxy-Server, das erneute Initiieren der Anforderung an den internen Server im Namen des Benutzers und die abschließende Rückgabe der Antwortinformationen des internen Servers an den Benutzer. Auf diese Weise erscheint der Proxyserver der Außenwelt als Server, und der Client, der auf den internen Server zugreift, verwendet den Proxyserver anstelle des tatsächlichen Benutzers, der auf die Website zugreift.

Gründe für die Verwendung eines Reverse-Proxys

  • Es kann die Sicherheit der Website schützen, da jede Anfrage aus dem Internet zuerst über den Proxyserver laufen muss.
  • Beschleunigen Sie Webanforderungen durch das Zwischenspeichern statischer Ressourcen.
  • Implementieren des Lastenausgleichs

Reverse-Proxy-Beispiel

Umgebungsbeschreibung

Angenommen, es gibt zwei Server AB. Server A stellt Webressourcen bereit und ist nur über das Intranet zugänglich. Server B verfügt über zwei Netzwerkkarten, eine befindet sich im selben Intranet wie Server A und die andere im externen Netzwerk. Zu diesem Zeitpunkt ist es für Benutzer C nicht möglich, direkt auf Server A zuzugreifen. Zu diesem Zeitpunkt kann auf die Anforderung von Benutzer C über Server B zugegriffen werden.

Hostname Netzwerkkarte IP veranschaulichen
moli-04 ens33 192.168.30.6 Intranet-IP, Proxyserver
moli-04 ens37 192.168.93.129 Externe IP, Proxyserver
moli-05 ens33 192.168.30.7 Intranet Server

  • Installieren Sie nginx auf beiden Maschinen
  • Der Moli-05-Serverzugriff erfolgt über ein WordPress-Blog mit dem Domänennamen blog.syushin.org
  • In der experimentellen Umgebung der virtuellen Maschine sind alle Firewalls ausgeschaltet.

Konfigurieren virtueller Hosts

Bearbeiten Sie die virtuelle Host-Konfigurationsdatei auf dem Moli-04-Rechner. Der Inhalt ist wie folgt:

[root@moli-04 extra]$ cat blog.syushin.org.conf 
Server{
 hören Sie 80;
 Servername blog.syushin.org;
 
 Standort / {
  Proxy-Passwort http://192.168.30.7;
  Proxy_Set_Header Host $host;
  Proxy_Set_Header X-Real-IP $Remote_Addr;
  proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
 } 
}

Ändern der Hosts-Datei

Ändern Sie die Hosts-Datei unter Windows und fügen Sie die Konfiguration hinzu

192.168.93.129 blog.syushin.org

Browsertests

Die Zugriffsadresse lautet 192.168.93.129, und die Seite der Maschine 05 wird auf der Schnittstelle angezeigt. Die Konfiguration ist erfolgreich.

Lastenausgleich

Lastausgleichsfunktion

  • Planen und Verwalten von Benutzerzugriffsanforderungen
  • Verteilen Sie den Druck der Benutzerzugriffsanfragen

Wenn ein Lastausgleichscluster ausgeführt wird, sendet er im Allgemeinen Client-Zugriffsanforderungen über einen oder mehrere Front-End-Lastausgleichsmodule an eine Gruppe von Back-End-Servern.

Nginx-Lastausgleich

Streng genommen wird Nginx nur als Reverse-Proxy von Nginx Proxy verwendet, aber da die Wirkung dieser Reverse-Proxy-Funktion die Wirkung einer Lastausgleichsmaschine ist, ist der Nginx-Lastausgleich ein spezieller Reverse-Proxy.

Die Hauptkomponenten zur Implementierung des Nginx-Lastausgleichs sind:

Nginx-Module veranschaulichen
ngx_http_proxy_module Proxy-Modul, das zum Senden von Anfragen an Serverknoten oder Upstream-Serverpools verwendet wird
ngx_http_upstream_module Das Lastausgleichsmodul kann die Lastausgleichsfunktion der Website und die Integritätsprüfung des Knotens realisieren

Einführung in das Upstream-Modul

Zu den vom Modul ngx_http_upstream_module unterstützten Proxy-Methoden gehören proxy_pass, fastcgi_pass usw., wobei hauptsächlich proxy_pass verwendet wird.

Mit dem Upstream-Modul kann nginx eine oder mehrere Gruppen von Knotenservergruppen definieren. Bei Verwendung wird die Website-Anforderung über den Proxy_pass-Proxy an die definierte entsprechende Knotengruppe gesendet.

Beispiel: Erstellen eines Node-Server-Pools

Upstream-Blog
 Server 192.168.30.5:80 Gewicht=5;
 Server 192.168.30.6:81 Gewicht=10;
 Server 192.168.30.7:82 Gewicht=15;
}

upstream : Ein Schlüsselwort zum Erstellen einer Knotenservergruppe, erforderlich;
blog : Der Name der Knotenservergruppe, erforderlich und kann angepasst werden;
server : Schlüsselwort, gefolgt von IP oder Domänenname oder IP:Port. Wenn der Port nicht angegeben ist, ist der Standardwert 80.
weight : Gewicht. Je größer der Wert, desto mehr Anfragen werden zugewiesen. Der Standardwert ist 1.

Zusätzlich zum Gewicht kann der Statuswert des Knotenservers auch wie folgt festgelegt werden:
max_fails : Die Standardanzahl zulässiger Anforderungsfehler beträgt 1. Wenn die maximale Anzahl überschritten wird, wird ein vom Modul proxy_next_upstream definierter Fehler zurückgegeben.
fail_timeout : Die Pausenzeit nach max_fails-Fehlern.
down : Zeigt an, dass der aktuelle Knotenserver nicht an der Last teilnimmt, was bedeutet, dass die Maschine nie verfügbar ist. Kann mit iP_hash verwendet werden
backup : Wenn alle anderen Nicht-Backup-Maschinen ausgefallen oder beschäftigt sind, fordern Sie die Backup-Maschine an. Daher hat diese Maschine den geringsten Druck.

Verwenden Sie den Domänennamen Upstream

Upstream-Blog2{
 Server www.syushin.com Gewicht=5;
 Server blog.syushin.org ausgefallen;
 Server-Backup blog.syushin.cc;
}

Planungsalgorithmus

rr-Polling (Standard-Planungsalgorithmus, statischer Planungsalgorithmus)

Verteilen Sie Clientanforderungen entsprechend der Reihenfolge der Clientanforderungen nacheinander an verschiedene Backend-Knotenserver.

wrr (gewichteter Round-Robin, statischer Planungsalgorithmus)

Gewichte werden auf der Grundlage von RR-Polling hinzugefügt. Bei Verwendung dieses Algorithmus ist das Gewicht proportional zum Benutzerzugriff. Je höher der Gewichtswert, desto mehr Anfragen werden weitergeleitet.
Wenn es beispielsweise 30 Anfragen und zwei Server A (10.0.0.1) und B (10.0.0.2) gibt und Sie möchten, dass A 10 Anfragen und B 20 Anfragen bearbeitet, können Sie dies folgendermaßen definieren:

Upstream-Pools{
 Server 10.0.0.1 Gewicht = 1;
 Server 10.0.0.2 Gewicht = 2;
}

ip_hash (statischer Planungsalgorithmus)

Jede Anfrage wird entsprechend dem Hash-Ergebnis der Client-IP zugewiesen. Wenn eine neue Anfrage eintrifft, wird die Client-IP zunächst durch einen Hash-Algorithmus in einen Wert gehasht. Bei nachfolgenden Client-Anfragen wird sie demselben Server zugewiesen, solange der Hash-Wert der Client-IP derselbe ist.

Upstream Blog_Pool {
 ip_hash;
 Server 192.168.30.5:80;
 Server 192.168.30.6:8090;
}

Hinweis: Bei Verwendung von IP_Hash sind Gewicht und Backup nicht zulässig.

least_conn-Algorithmus

Der least_conn-Algorithmus bestimmt die Verteilung basierend auf der Anzahl der Verbindungen zu den Backend-Servern, und dem Server mit der geringsten Anzahl von Verbindungen werden mehr Anfragen zugewiesen.

Neben den oben aufgeführten (häufig verwendeten) Scheduling-Algorithmen gibt es noch viele weitere, die hier nicht einzeln aufgeführt werden.

Modul http_proxy_module

http_proxy_module kann Anfragen an einen anderen Server weiterleiten. Im Reverse-Proxy wird die angegebene URI über die Standortfunktion abgeglichen, und dann werden die Anfragen, die mit der übereinstimmenden URI übereinstimmen, über proxy_pass an den definierten Upstream-Knotenpool weitergeleitet.

http_proxy-Modulparameter

Parameter veranschaulichen
Proxy_Header festlegen Setzen Sie das HTTP-Anforderungsheaderelement auf den Backend-Serverknoten, um beispielsweise zu ermöglichen, dass der Proxy-Backend-Serverknoten die tatsächliche IP-Adresse des Zugriffsclientbenutzers erhält.
Client-Body-Puffergröße Wird verwendet, um die Größe des Client-Anforderungshauptteilpuffers anzugeben
Proxy_Verbindungs-Timeout Gibt die Zeitüberschreitungsdauer für die Verbindung zum Reverse-Proxy-Backend-Knotenserver an, d. h. die Zeitüberschreitungsdauer für die Einleitung eines Handshakes und das Warten auf eine Antwort.
Proxy_Sendezeitüberschreitung Gibt die Datenübertragungszeit des Proxy-Backend-Servers an, d. h. der Backend-Server muss alle Daten innerhalb der angegebenen Zeit übertragen, andernfalls trennt nginx die Verbindung
Proxy_Lese-Timeout Legen Sie die Zeit fest, zu der nginx Informationen vom Backend-Server des Proxys erhält. Dies bedeutet, dass nginx nach erfolgreichem Verbindungsaufbau auf die Antwort des Backend-Servers wartet. Tatsächlich ist dies die Zeit, zu der nginx in die Backend-Warteschlange gelangt ist und auf die Verarbeitung wartet.
Proxy-Puffergröße Legen Sie die Puffergröße fest. Standardmäßig entspricht die Puffergröße der Größe, die durch die Direktive „proxy_buffers“ festgelegt wurde.
Proxy-Puffer Legen Sie die Anzahl und Größe des Puffers fest. Die von nginx vom Proxy-Backend-Server erhaltenen Antwortinformationen werden auf den Puffer gesetzt
Proxy_busy_buffers_size Wird verwendet, um die Größe der Proxy-Puffer festzulegen, die verwendet werden können, wenn der Server ausgelastet ist. Die offiziell empfohlene Größe ist Proxy-Puffer * 2
Proxy_TRMP_Dateischreibgröße Geben Sie die Größe der temporären Proxy-Cache-Dateien an

Proxy_pass-Nutzung

Format: Proxy-Pass-URL;

Hier ist ein Beispiel:

Proxy-Pass http://blog.syushin.com/;
Proxy-Passwort http://192.168.30.7:8080/uri;
Proxy-Passwort http://tmp/www.sock;

Die URL kann ein Domänenname, eine IP-Adresse oder eine Socket-Datei sein.

Bei der Proxy_Pass-Konfiguration sind einige Dinge zu beachten:
Beispiel 1

Standort /upload/ {
Proxy-Passwort http://192.168.30.7;
}

Beispiel 2

Standort /upload/ {
proxy_pass http://192.168.30.7/; # Beachten Sie den zusätzlichen Schrägstrich
}

Beispiel 3

Standort /upload/ {
Proxy-Passwort http://192.168.30.7/blog/;
}

Beispiel 4

Standort /upload/ {
Proxy-Passwort http://192.168.30.7/blog;
}

Wenn der Servername blog.syushin.com ist und Sie http://blog.syushin.com/uploa... anfordern, lautet das Anforderungsergebnis des obigen Beispiels 1–4:

Beispiel 1: http://192.168.30.7/upload/index.html
Beispiel 2: http://192.168.30.7/index.html
Beispiel 3: http://192.168.30.7/blog/index.html
Beispiel 4: http://192.168.30.7/blogindex.html

Okay, das ist alles für diesen Artikel. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen.

Das könnte Sie auch interessieren:
  • Eine kurze Diskussion über den siebenschichtigen Reverse-Proxy und Lastenausgleich von Nginx
  • Detaillierte Erläuterung der Nginx-Lastverteilung und der Reverse-Proxy-Konfiguration und -Optimierung
  • Erläuterung zum Lastenausgleich und Reverseproxy von Nginx
  • Beispiel für die Verwendung von Nginx als Reverse-Proxy zum Erreichen des Lastenausgleichs
  • Verständnis des Nginx-Reverse-Proxy- und Lastenausgleichskonzepts und Modulnutzung

<<:  Detaillierte Analyse des binlog_format-Modus und der Konfiguration in MySQL

>>:  React-Implementierungsbeispiel mit Amap (react-amap)

Artikel empfehlen

Beispiele für die Verwendung von React Ref

Inhaltsverzeichnis Was ist ref So verwenden Sie r...

Detaillierte Erklärung der Lösung für das Nginx-Panikproblem

In Bezug auf das Nginx-Panikproblem müssen wir zu...

Detaillierte Erläuterung der Nginx-Timeout-Konfiguration

Ich habe kürzlich in einem Projekt nginx und im B...

vue cli3 implementiert die Schritte der Verpackung nach Umgebung

Das mit CLI3 erstellte Vue-Projekt wird als Nullk...

Implementierung der CSS-Rahmenlängensteuerungsfunktion

Wenn die Rahmenlänge früher kleiner als der Conta...

Einführung in die Nginx-Protokollverwaltung

Nginx-Protokollbeschreibung Über Zugriffsprotokol...

mysql 8.0.19 winx64.zip Installations-Tutorial

Dieser Artikel zeichnet das Installationstutorial...

Beispiel, wie man einen Div-Hintergrund transparent macht

Es gibt zwei gängige Möglichkeiten, den Div-Hinte...

Schritte zum Erstellen eines Dateiservers mit Apache unter Linux

1. Über den Dateiserver Wenn Sie in einem Projekt...

Tipps zur Verwendung kleiner HTML-Tags

Phrasenelemente wie <em></em> können d...

So installieren und verwenden Sie Cockpit unter CentOS 8/RHEL 8

Cockpit ist ein webbasiertes Serververwaltungstoo...

Detaillierte Erklärung zu sinnvollen Einstellungen des MySQL sql_mode

Sinnvolle Einstellung des MySQL sql_mode sql_mode...