Detaillierte Erläuterung des Nginx-Forward-Proxys und des Reverse-Proxys

Detaillierte Erläuterung des Nginx-Forward-Proxys und des Reverse-Proxys

Weiterleitungsproxy

Angenommen, es gibt ein Intranet

Es gibt zwei Maschinen im Intranet, nur Maschine A kann auf das Internet zugreifen

b kann nicht auf das Internet zugreifen, aber a und b sind über das Internet verbunden

Wenn B zu diesem Zeitpunkt auf das externe Netzwerk zugreifen möchte, kann es einen Weiterleitungsproxy für den Zugriff auf das externe Netzwerk verwenden.

Ein Forwardproxy simuliert den Zielserver im Intranet und leitet Anfragen von anderen Rechnern im Intranet an den Zielserver weiter.

Weiterleitung zum realen Zielserver im externen Netzwerk

Der Forwardproxy akzeptiert also Anfragen von anderen Maschinen im Intranet.

Beim Reverse-Proxy ist es andersherum

Es handelt sich ebenfalls um ein Intranet mit mehreren Rechnern, von denen nur einer mit dem externen Netzwerk verbunden ist.

Der Reverse-Proxy akzeptiert jedoch keine Zugriffsanfragen von Intranet-Rechnern.

Der Reverse-Proxy akzeptiert Zugriffsanfragen aus dem externen Netzwerk

Leiten Sie die Anfrage dann an andere Rechner im Intranet weiter

Der Benutzer, der die Anfrage aus dem externen Netzwerk sendet, weiß nicht, an wen der Reverse-Proxy-Server die Anfrage weiterleitet

So richten Sie die Forwardproxy-Funktionalität auf einem Computer ein

Bearbeiten Sie wie in der Abbildung gezeigt eine Nginx-Konfigurationsdatei

Das obige Bild zeigt den Inhalt der Konfigurationsdatei

Wenn Sie einen Server als Forward-Proxy-Server konfigurieren

Dann muss diese virtuelle Host-Konfigurationsdatei der Standard-virtuelle Host sein

Denn alle Netzwerkanfragen zum Zugriff auf diese Maschine sollten zuerst auf diesen virtuellen Host zugreifen.

Hier müssen wir also default_server festlegen

Dann müssen Sie den ursprünglichen Standardnamen der virtuellen Hostkonfigurationsdatei ändern

Ändern Sie wie in der Abbildung gezeigt den Namen der Konfigurationsdatei default.conf

Dadurch wird die ursprüngliche Standardkonfigurationsdatei des virtuellen Hosts gelöscht.

Weil die Standardkonfigurationsdatei des virtuellen Hosts default.conf ist

Der Resolver in der Konfigurationsdatei ist 119.29.29.29

Es bedeutet, eine DNS-Adresse zu konfigurieren

Da es sich um einen Forward-Proxy handelt, wird nach der Annahme des vom Intranet angeforderten Domänennamens

Um die Anfrage an den Server zu senden, auf den Sie tatsächlich zugreifen möchten

Der vom Intranet gesendete Domänenname enthält jedoch nicht die IP-Adresse

Wir müssen also den Domänennamen an den DNS-Server senden, um die IP-Adresse aufzulösen

Nach Erhalt der IP-Adresse kann diese an den Server weitergeleitet werden, um darauf zuzugreifen

Sie müssen hier also eine DNS-Adresse konfigurieren

Nach der Annahme des Intranet-Domänennamens wird der Domänenname zur Auflösung an diesen DNS gesendet

Der folgende Standort kann gemäß der Abbildung eingestellt werden

Auf diese Weise akzeptiert der Forward-Proxy-Server die Anfrage vom Intranet-Rechner

Der Domänenname wird zur Auflösung an den konfigurierten DNS gesendet und anschließend auf den realen Server zugegriffen.

Senden Sie dann den vom realen Server zurückgegebenen Inhalt an den Intranet-Computer, der die Anforderung gestellt hat.

Nginx-Reverseproxy

Erstellen Sie ein Reverse-Proxy-Beispiel

Erstellen Sie eine Testkonfigurationsdatei für den virtuellen Host, wie in der Abbildung gezeigt

Abhörport 8080, Domänenname ist www.test.com

Das Stammverzeichnis ist /data/wwwroot/test.com

Die beim Zugriff auf den virtuellen Host angezeigte Homepage-Datei ist index.html

Erstellen Sie wie in der Abbildung gezeigt das Stammverzeichnis des virtuellen Hosts /data/wwwroot/test.com

Verwenden Sie dann echo "test.com_8080" > !$/index.html

Erstellen Sie eine Homepage-Datei mit dem Inhalt test.com_8080

Diese Datei befindet sich im Verzeichnis /data/wwwroot/test.com

Erstellen Sie wie in der Abbildung gezeigt eine neue Konfigurationsdatei für den virtuellen Reverse-Proxy-Host

Abhörport 80, Domänenname ist www.test.com

Der folgende Speicherort / enthält die Reverse-Proxy-Konfiguration

Beim Zugriff auf diesen virtuellen Host wird die Zugriffsanforderung an 127.0.0.1:8080 gesendet

Wie in der Abbildung gezeigt, verwenden Sie curl, um auf den virtuellen Host 127.0.0.1:8080 zuzugreifen

Das Ergebnis ist test.com_8080, was bedeutet, dass auf diesen virtuellen Host zugegriffen werden kann.

Erstellen Sie wie in der Abbildung gezeigt eine weitere Konfigurationsdatei für den virtuellen Host

Ähnlich wie beim vorherigen virtuellen Testhost

Für diesen virtuellen Host ist jedoch kein Domänenname festgelegt

Der zurückgegebene Inhalt der Standorteinstellung ist 8080 Standardzeichenfolge

Speichern und beenden, nginx neu laden

Deaktivieren Sie auch die Standardservereinstellung des virtuellen Testhosts

127.0.0.1:8080 entspricht also zwei virtuellen Hosts

Einer ist der virtuelle Testhost und der andere der virtuelle Standardhost des 8080.

Die IP und der Port dieser beiden virtuellen Hosts sind genau gleich

Der Unterschied zwischen ihnen besteht darin, dass der virtuelle Testhost einen Domänennamen hat

Der virtuelle Standardhost 8080 hat keinen Domänennamen

Jetzt ist 8080 default als virtueller Standardhost eingestellt

Wenn Sie also nur auf 127.0.0.1:8080 zugreifen

Der Zugriff muss auf den 8080-Standard-Virtual-Host erfolgen

Wenn Sie auf den virtuellen Testhost zugreifen möchten, müssen Sie den Domänennamen des virtuellen Testhosts hinzufügen

So greifen Sie erfolgreich auf den virtuellen Testhost zu

Wie in der Abbildung dargestellt, können Sie sehen, dass das Ergebnis, das durch den Zugriff auf curl 127.0.0.1:8080/ zurückgegeben wird, 8080 Standard ist

Verwenden Sie curl -x127.0.0.1:8080 www.test.com

Hier wird der Domänenname angegeben und der zurückgegebene Wert lautet test.com_8080

Wenn Sie auf den virtuellen Testhost zugreifen möchten, müssen Sie den IP-Port an den Domänennamen binden.

Wie in der Abbildung gezeigt, greift curl auf den Domänennamen 127.0.0.1:80 www.test.com zu

Das zurückgegebene Ergebnis ist test.com_8080 und zeigt damit an, dass der Reverse-Proxy erfolgreich ist.

Wir haben auf Port 80 zugegriffen, aber der Inhalt des virtuellen Hosts von Port 8080 wurde tatsächlich zurückgegeben

Kommentieren Sie, wie in der Abbildung gezeigt, die folgenden Zeilen unterhalb der Zeile „proxy_pass“ im virtuellen Reverse-Proxy-Host aus.

Speichern und beenden, nginx neu laden

Wie in der Abbildung gezeigt, verwenden Sie curl, um auf den Domänennamen 127.0.0.1:80 www.test.com zuzugreifen.

Der tatsächlich zurückgegebene Wert ist 8080 Standard

Aber wir wollen auf den virtuellen Testhost zugreifen

Wie in der Abbildung gezeigt, proxy_set_header Host $host;

Diese Codezeile gibt den Domänennamen an, auf den zugegriffen werden soll

Die obigen Sätze 127.0.0.1:8080

Wenn der Reverse-Proxy verwendet wird, wird er auf diesen IP-Port verweisen

Wenn Sie den Host nicht festlegen, greifen Sie nur auf den virtuellen Host 127.0.0.1:8080 zu

Wenn der Host festgelegt ist, wird auf 127.0.0.1:8080 verwiesen, das an den angegebenen Host gebunden ist.

Hier ist $host eine Systemvariable und ihr tatsächlicher Wert ist der Servername des aktuellen virtuellen Hosts.

Das heißt, www.test.com, was ist Servername, was ist der Wert von Host

Das Festlegen des Hosts hier entspricht curl -x127.0.0.1:8080 www.test.com

Wenn der Host hier nicht angegeben ist, wird nur auf 127.0.0.1:8080 zugegriffen.

Auf diese Weise können Sie den Domänennamen an den IP-Port binden

Wie in der Abbildung gezeigt, kann proxy_pass neben dem Schreiben des IP-Ports auch direkt den Domänennamen schreiben

Hier steht www.123.com:8080/

Aber wenn man es so schreibt, weiß nginx nicht, wohin dieser Domänenname verweist

Sie müssen also auch die entsprechende IP im System binden

Schreiben Sie beispielsweise in die Datei /etc/hosts den entsprechenden Domänennamen und die IP für die Bindung

Auf diese Weise löst das Domänennamensystem von proxy_pass in nginx eine IP-Adresse auf

Greifen Sie dann auf diesen IP-Port zu

Der folgende Proxy-Header-Host wird zum Festlegen eines Domänennamens verwendet

Dieser Domänenname wird für den Zugriff an den oben genannten IP-Port gebunden

Wenn der oben angegebene IP-Port nicht als IP, sondern als Domänenname geschrieben ist

Es besteht kein Konflikt mit dem unten angegebenen Domänennamen, da der oben angegebene Domänenname zur Auflösung der IP verwendet wird

Der unten angegebene Domänenname wird an den oben aufgelösten IP-Port für den Zugriff gebunden

Dieses Beispiel verwendet $host, eine globale Variable in nginx

Diese Variable entspricht tatsächlich einem Wert, der der Wert des aktuellen virtuellen Hosts Servername ist

Aber im Allgemeinen ist es bequemer, den IP-Port direkt zu schreiben

Oben wird der IP-Port angegeben

Im Folgenden wird der Host-Domänenname angegeben, der an den IP-Port gebunden ist

Nginx Reverse-Proxy 02

Wie in der Abbildung gezeigt, kann auf die Anweisung proxy_pass eine URL folgen

Es gibt drei Formate: Übertragungsprotokoll + Domänenname + URI (Zugriffspfad)

Transportprotokoll + IP-Port + URI

Transportprotokoll + Socket

Hier sind Unix, http und https alles Arten von Übertragungsprotokollen

Domänenname + URI und IP-Port + URI und Socket sind alle Zugriffspfade

Ein Socket ist normalerweise ein dedizierter Zugriffsport für ein Programm.

Der Zugriff auf einen Socket ist der Zugriff auf ein bestimmtes Programm. Daher ist die Verwendung eines Pfads nicht erforderlich.

Wie in der Abbildung gezeigt, führen beim Schreiben von proxy_pass unterschiedliche Schreibmethoden zu unterschiedlichen Ergebnissen

Beispiel: Standort /aming/

Wenn der aufgerufene Pfad /aming/ enthält, wird er ausgelöst

Hier wird proxy_pass ausgeführt

Unterschiedliche Möglichkeiten zum Schreiben des Proxy-Passworts im Speicherort führen jedoch zu unterschiedlichen tatsächlichen Zugriffspfaden.

Obwohl proxy_pass ausgeführt wird, weil der aufgerufene Pfad das Verzeichnis /aming/ enthält

Der tatsächliche Zugriffspfad enthält jedoch nicht unbedingt /aming/

Dieses Beispiel greift auf die Datei /aming/a.html im virtuellen Host zu.

Abhängig von der Art und Weise, wie der Proxy-Pass geschrieben wird, werden tatsächlich unterschiedliche Pfade aufgerufen.

Wenn nach dem IP-Port kein Verzeichnissymbol steht

greift auf /aming/a.html zu, was wir wollen

Wenn auf den IP-Port das Symbol für das Stammverzeichnis / folgt

Dann wird direkt auf die a.html-Datei im Stammverzeichnis zugegriffen, was offensichtlich falsch ist.

Wenn auf den IP-Port /linux/ folgt, wird auf die Datei a.html in /linux/ zugegriffen.

Wenn auf den IP-Port /linux folgt und am Ende kein Verzeichnissymbol / steht

wird /linuxa.html besuchen

Wenn Sie also korrekt auf /aming/a.html zugreifen möchten

Es gibt zwei Möglichkeiten, es zu schreiben. Eine besteht darin, nach dem IP-Port kein Verzeichnissymbol hinzuzufügen.

Die zweite Möglichkeit ist, den vollständigen Text als ip port/aming/ zu schreiben.

Nach dem obigen Beispiel ist es egal, welches Verzeichnis sich hinter dem IP-Port befindet,

Der eigentliche Zugriffspfad wird direkt der Name der Datei sein, auf die zugegriffen werden soll, a.html

Direkt zum Verzeichnis hinter dem IP-Port hinzufügen

Wenn nach dem IP-Port kein Verzeichnissymbol vorhanden ist, fügt das System automatisch den Verzeichnispfad /aming/a.html hinzu

Sobald ein Verzeichnissymbol vorhanden ist, wird a.html direkt nach diesem Verzeichnissymbol platziert

Der zweite Fall ist, IP-Port + /linux

Das tatsächliche Ergebnis ist der Zugriff auf /linuxa.html

Dies kann daran liegen, dass auf Linux kein Verzeichnissymbol / folgt.

Das System betrachtet Linux also als einen unfertigen Dateinamen

Dann fügen Sie einfach den Dateinamen a.html zusammen mit linux ein

Dies bedeutet, dass die zugegriffen werden solle Datei /linuxa.html ist.

Egal welchen Pfad Sie also schreiben, es muss das Verzeichnissymbol / folgen.

Reverse-Proxy 03

Wie in der Abbildung gezeigt, wird proxy_set_header verwendet, um die Header-Informationen festzulegen, die der Proxy-Server empfangen kann.

Beispielsweise gibt es drei Computer abc

a ist der Computer, mit dem wir zugreifen, und wir senden Zugriffsanfragen von einem

b ist ein Reverse-Proxy-Server, der die von uns gesendete Zugriffsanfrage empfängt.

c ist der Server, der per Reverse-Proxy bedient wird, also der Server, auf den wir eigentlich zugreifen möchten

b leitet unsere Zugriffsanfrage an c weiter

Wenn proxy_set_header nicht festgelegt ist, werden bei der Weiterleitung der Anforderung von b an c die entsprechenden Header-Informationen nicht übertragen.

Ist dieser Parameter gesetzt, werden bei der Weiterleitung der Anfrage die entsprechenden Header-Informationen mitgeschickt.

Die Variablen $remote_addr und $proxy_add_x_forwarded_for sind eingebaute Variablen von nginx

Die Variable $remote_addr speichert die IP-Adresse des Reverse-Proxy-Servers selbst.

Die Variable $proxy_add_x_forwarded_for speichert die IP-Adresse des Client-Computers.

Wenn diese Variable nicht gesetzt ist, kennt der C-Server die tatsächliche Quelladresse der Zugriffsanforderung nicht.

Durch Festlegen dieser Variable kann der C-Server ermitteln, von welcher IP-Adresse die Zugriffsanforderung kam.

Bearbeiten Sie wie in der Abbildung gezeigt die Konfigurationsdatei des virtuellen Hosts www.test.com

Angenommen, dieser virtuelle Host ist der C-Server, auf den wir zugreifen möchten

Zwei Echos werden an Ort und Stelle gesetzt, um die Quelladresse der Zugriffsanforderung und die tatsächliche Quelladresse anzuzeigen

$remote_addr zeichnet die Adresse des Reverse-Proxy-Servers auf

$proxy_add_x_forwarded_for zeichnet die tatsächliche Quelladresse der Zugriffsanforderung auf, d. h. die Clientadresse

Mit dieser Einstellung werden beim Zugriff auf diesen virtuellen Host die in diesen beiden Variablen gespeicherten Werte angezeigt.

Speichern und beenden, dann die Konfigurationsdatei neu laden

Bearbeiten Sie wie in der Abbildung gezeigt die Konfigurationsdatei des virtuellen Hosts des Reverse-Proxy-Servers

Wie auf dem Bild zu sehen ist, können Sie den Standort sehen

Die Zeilen proxy_set_header X-Real-IP und proxy_set_header X-Forwarded-For sind auskommentiert.

Führen Sie zunächst einen Test durch, speichern Sie und beenden Sie die Konfigurationsdatei, um sie neu zu laden.

Wie in der Abbildung gezeigt, verwenden Sie curl, um die Zugriffsanforderung von 192.168.133.140:80 zu testen

Die IP-Adresse 192.168.133.140 ist tatsächlich die Client-IP-Adresse.

Weil die Zugriffsanfrage von dieser IP gesendet wird

Es ist jedoch ersichtlich, dass nach dem Test tatsächlich zwei 127.0.0.1-Loopback-Adressen angezeigt werden.

Es gibt keine IP 192.168.133.140

Bei diesem Test befinden sich der Reverse-Proxy-Server und der reale Server beide auf der lokalen Maschine.

Daher ist die Quell-IP-Adresse der vom realen Server c empfangenen Zugriffsanforderung die Loopback-Adresse des lokalen Computers.

Der Reverse-Proxy-Dienst b sendet eine Anfrage an den realen Server c über die interne Loopback-Adresse 127.0.0.1

Da sich beide Server auf derselben Maschine befinden, erfolgt die Kommunikation zwischen Programmen auf derselben Maschine grundsätzlich über die Loopback-Adresse 127.0.0.1.

Der Wert von $remote_addr von c ist also 127.0.0.1

Da der Reverse-Proxy-Server B $proxy_add_x_forwarded_for nicht setzt

Der vom realen Server c empfangene Wert der Variable $proxy_add_x_forwarded_for ist also die IP-Adresse, von der die Anfrage gesendet wurde.

Das ist 127.0.0.1

$proxy_add_x_forwarded_for Diese Variable zeichnet tatsächlich die

Ein variabler Wert der IP-Adressen, die die Anfrage insgesamt durchlaufen hat. Mehrere IP-Adressen werden durch Kommas getrennt.

Wenn die gesendete Zugriffsanforderung die Variable $proxy_add_x_forwarded_for nicht setzt

Dann ist der Wert dieser Variablen auf der Empfangsseite einfach die letzte von der Zugriffsanforderung gesendete IP-Adresse, die mit remote_addr identisch ist.

Beispielsweise erfolgt die Zugriffsanfrage von a nach b nach c

Wenn b $proxy_add_x_forwarded_for setzt

Dann ist das Format dieser Variable a_ip, b_ip

Das heißt, es wird die IP von a und die IP von b aufgezeichnet.

Sollten mehrere Server dazwischen liegen, werden auch deren IP-Adressen, jeweils durch Kommas getrennt, erfasst.

Natürlich muss jeder Proxyserver die Variable $proxy_add_x_forwarded_for setzen

Andernfalls wird die Variable $proxy_add_x_forwarded_for des nächsten Proxyservers die zuvor übergebene IP-Adresse nicht aufzeichnen.

Es kann nur die IP-Adresse des vorherigen Servers aufgezeichnet werden

Da in diesem Test b $proxy_add_x_forwarded_for nicht setzt,

Der Wert der Variable $proxy_add_x_forwarded_for des Dienstes c ist also gleich dem Wert von $remote_addr

Wie in der Abbildung gezeigt, bearbeiten Sie im zweiten Test die Konfigurationsdatei des Reverse-Proxy-Servers b

Entfernen Sie die Kommentarzeichen aus den beiden Zeilen X-Real-IP und X-Forwarded-For im Speicherort

Speichern und beenden, um die Konfigurationsdatei neu zu laden

Wie gezeigt, testen Sie erneut

Sie können das zurückgegebene Ergebnis sehen. Der Wert von remote_addr in der ersten Zeile ist 127.0.0.1

Dies ist die IP-Adresse des Proxyservers B.

Der Wert von $proxy_add_x_forwarded_for in der zweiten Zeile sind zwei IP-Adressen.

Im curl-Befehl wird die Zugriffsanforderung von 192.168.133.140 gesendet

Mit anderen Worten, die IP-Adresse von Client A ist 192.168.133.140

Die IP von b ist 127.0.0.1

$proxy_add_x_forwarded_for zeichnet die IP-Adressen auf, über die die Zugriffsanforderung an c läuft

Die Zugriffsanforderung erfolgt von A nach B und dann von B nach C.

Daher zeichnet die Variable $proxy_add_x_forwarded_for die IP-Adresse von A und die IP-Adresse von B auf.

Da die Zugriffsanforderung diese beiden IP-Adressen durchläuft, bevor sie c erreicht

Wenn Sie also in Zukunft einen Reverse-Proxy verwenden, müssen diese Variablenzeilen gesetzt werden

Der reale Server dahinter kann die reale IP-Adresse der Zugriffsanforderung erhalten

Reverse-Proxy 04

Wie in der Abbildung gezeigt, gibt es nicht viele Szenarien für Umleitungsanwendungen. Es gibt hauptsächlich drei Möglichkeiten, sie zu schreiben.

Die Funktion besteht darin, den Standort zu ändern und die vom Proxyserver zurückgegebenen Header-Informationen zu aktualisieren

Die erste Möglichkeit, es zu schreiben, besteht darin, die zurückgegebenen Header-Informationen umzuleiten.

Ersetzung ist die zu ändernde Information

Die Weiterleitung wird geändert in Ersatz

Die zweite Schreibweise ist „Default“, was „Standardeinstellung“ bedeutet.

Das dritte Aus bedeutet, die Umleitungsfunktion auszuschalten

Führen Sie wie in der Abbildung gezeigt einen Test durch und bearbeiten Sie die Konfigurationsdatei des Proxyservers

Damit der Test erfolgreich ist, müssen mehrere Bedingungen erfüllt sein

Zunächst einmal kann auf den Speicherort nur das Stammverzeichnis/ folgen, nichts anderes.

Die zweite Bedingung ist, dass auf die URL nach proxy_pass kein /-Symbol folgen darf.

Normalerweise sollte es mit / enden, aber hier kann es nicht mit / enden.

Das Verzeichnis, auf das Sie zugreifen, muss tatsächlich existieren. Wenn es nicht existiert, können Sie eines erstellen.

Anschließend können Sie im Verzeichnis auch eine Datei index.html erstellen und darin einige Zeichenfolgeninhalte bearbeiten.

Speichern und beenden, um die Konfigurationsdatei neu zu laden

Bearbeiten Sie wie in der Abbildung gezeigt die Konfigurationsdatei des Proxyservers

Geschrieben in diesem einfachen Format, wie in der Abbildung gezeigt

Speichern und beenden, um die Konfigurationsdatei neu zu laden

Wie in der Abbildung gezeigt, wird beim Testen des Zugriffs von curl auf aming mit einem / auf die Datei index.html zugegriffen.

Wir möchten jedoch auf das Verzeichnis selbst zugreifen, nicht auf eine darin enthaltene Datei.

Deshalb darf beim Crulling die aufzurufende Adresse nicht mit dem Symbol / enden.

Auf diese Weise können Sie auf das aming-Verzeichnis zugreifen

Wie Sie sehen, ist der zurückgegebene Code 301, was eine permanente Umleitung bedeutet

Das Feld nach dem Standort unten ist der Zugriffspfad mit Port 8080

Bearbeiten Sie wie in der Abbildung gezeigt die Konfigurationsdatei des Proxyservers

Fügen Sie access_log /tmp/456.log hinzu

Dadurch wird das Zugriffsprotokoll des Servers geöffnet. Durch die Überprüfung des Zugriffsprotokolls erhalten Sie ein besseres Verständnis des Zugriffsvorgangs.

Speichern Beenden Neu laden

Wie in der Abbildung gezeigt, endet der erneute Curl-Test dieses Mal mit dem Symbol /.

cat /tmp/456.log Zugriffsprotokoll anzeigen

Es wurde festgestellt, dass die Protokollinformationen keine Informationen wie Host und Port enthalten

In diesem Fall können Sie die Formatkonfiguration in der Konfigurationsdatei nginx.conf ändern

Wie in der Abbildung gezeigt, waren die drei Zeilen log_format main in der Konfigurationsdatei ursprünglich auskommentiert.

Damit diese Zeilen wirksam werden, entfernen Sie nun die Kommentare. Dies ist die Formateinstellung der Log-Rückgabeinformationen.

Fügen Sie, wie in der Abbildung gezeigt, am Ende zwei Nginx-Variablen $host $server_port hinzu.

Anschließend speichern, beenden und neu laden, sodass die im Zugriffsprotokoll angezeigten Informationen mit den Informationen dieser beiden Variablen ergänzt werden.

Bearbeiten Sie wie in der Abbildung gezeigt die Konfigurationsdatei des Proxyservers und fügen Sie auch die access_log-Konfiguration hinzu.

Die Protokolladresse lautet /tmp/proxy.log

Fügen Sie main am Ende hinzu, da das Konfigurationsformat in nginx.conf mit main benannt ist

Wenn Sie hier main hinzufügen, bedeutet dies, dass Sie das Hauptbenennungsformat zur Anzeige von Protokollinformationen verwenden.

Wie in der Abbildung gezeigt, ist das access_log im Proxyserver auch

Sie müssen am Ende auch „main“ hinzufügen, um die Protokollinformationen im Hauptformat anzuzeigen.

Speichern, beenden und neu laden

Wie in der Abbildung gezeigt, testet curl dieses Mal mit einem /-Symbol am Ende

Überprüfen Sie das 456.log-Backend-Serverprotokoll und Sie können sehen, dass auf Port 8080 zugegriffen wird.

Überprüfen Sie das Proxyserverprotokoll proxy.log und Sie können sehen, dass auf Port 80 zugegriffen wird.

Der Netzwerkcode ist 200, was normal ist.

Wie im Bild zu sehen, endet der Zugriff diesmal ohne das /-Symbol.

Sie können sehen, dass die Rendite 301 ist

Überprüfen Sie proxy.log und es gibt 301 zurück

Wie in der Abbildung gezeigt, testen und überprüfen Sie die beiden Protokolle erneut

Siehe die Protokollinformationen von 301 bis 200

Kurz gesagt, wir haben bestätigt, dass wir auf Port 80 zugegriffen haben und zu Port 8080 gesprungen sind

Der Client kann jedoch nicht auf Port 8080 zugreifen.

Wie in der Abbildung gezeigt, kann proxy_redirect verwendet werden, um dieses Problem zu lösen

Hier ist http://$host:8080/ /;

Auf diese Weise können Sie die ursprünglich zurückgegebenen Portinformationen 8080 entfernen.

Speichern Beenden Neu laden

Wie gezeigt, erneut testen

Wie Sie sehen, ist der zurückgegebene Wert 301

Dann gibt es in der Adresse nach dem Standort keine Informationen zum Port 8080.

Reverse-Proxy 05

proxy_buffering bedeutet Pufferung

Puffern bedeutet, einen Bereich im Speicher zu reservieren und Daten darin zu schreiben.

Wenn eine bestimmte Datenmenge geschrieben wurde, werden die Daten im Puffer auf die Festplatte geschrieben.

Hierdurch lässt sich die Häufigkeit von Lese- und Schreibvorgängen auf der Festplatte erheblich reduzieren.

Wenn keine Pufferung durchgeführt wird, muss die Festplatte bei jeder Datengenerierung gelesen und beschrieben werden, was eine starke Belastung der Festplatte darstellt.

Angenommen, es gibt drei Objekte: Client A, Proxyserver B und Proxyserver C.

a sendet eine Anfrage, b empfängt die Anfrage und leitet sie an c weiter

c gibt Daten an b zurück, und dann sendet b die Daten an a

Dies ist die allgemeine Vorgehensweise, aber wenn ein Benutzer viele Zugriffsanfragen stellt,

Oder es gibt viele Clients, die Zugriffsanfragen stellen

Dann für den Proxy-Server b und den Proxy-Server c

Jede Anfrage muss gemäß diesem Prozess bearbeitet werden, was eine große Belastung darstellt

Proxy_buffering dient zum Festlegen eines oder mehrerer Pufferbereiche im Speicher des Proxyservers b.

Wenn der Pufferbereich voll ist, werden die Daten an den entsprechenden Client weitergeleitet.

Auf diese Weise wird die Anzahl der Datenweiterleitungszeiten des Proxyservers b erheblich reduziert und die Belastung verringert.

Wenn proxy_buffering eingeschaltet ist, bestimmt proxy_busy_buffer_size, wann Daten an einen

Wenn während dieses Vorgangs der Pufferbereich voll ist, kommt es zu einem Datenüberlauf

Die zusätzlichen Daten werden in temp_file geschrieben, eine temporäre Datei, die auf der Festplatte gespeichert wird.

Wenn proxy_buffering ausgeschaltet ist, werden die von c zurückgegebenen Daten direkt von b an a weitergeleitet.

Es werden keine weiteren Vorgänge ausgeführt

Wie in der Abbildung gezeigt, unabhängig davon, ob proxy_buffering ein- oder ausgeschaltet ist

proxy_buffer_size Diese Option ist wirksam. Mit diesem Parameter wird ein Puffer gesetzt

In diesem Puffer werden die vom Server zurückgemeldeten Header-Informationen gespeichert.

Wenn die Größe nicht ausreicht, um die Header-Informationen zu speichern, wird ein Fehlercode 502 angezeigt.

Es wird daher empfohlen, es auf 4K einzustellen

Wie in der Abbildung dargestellt, definiert proxy_buffers die Anzahl der Puffer für jede Anforderung und die spezifische Größe jedes Puffers

Hier ist 8 4k definiert, was bedeutet, dass es 8 Puffer mit einer Größe von jeweils 4k gibt.

Dann beträgt die gesamte Puffergröße 8*4 = 32 k

Bei angenommenen 10.000 Anfragen beträgt der Puffer 8 x 10.000 Puffer.

Da diese Einstellung für jede Anfrage gilt, nicht nur für 8 Puffer insgesamt

proxy_busy_buffer_size definiert, wie viele Daten benötigt werden, bevor Daten an den Client übertragen werden

Die Definition hier ist 16k, wenn also der zu dieser Anfrage gehörende Puffer von b 16k Daten empfängt

Die Daten werden an einen

Es gibt hier 8 Puffer mit einer Gesamtgröße von 32 KB. Die Puffer befinden sich im Allgemeinen in zwei Zuständen:

Einer dient zum Empfangen von Daten, der andere zum Senden von Daten. Sie können nicht gleichzeitig Daten empfangen und senden.

proxy_busy_buffer_size definiert die Größe des Puffers zum Senden von Daten

Daher muss die Größe von proxy_busy_buffer_size kleiner sein als die Gesamtgröße des Puffers.

Wenn die empfangenen Daten die durch proxy_busy_buffer_size festgelegte Datenmenge erreichen

Diese Puffer wechseln in den Zustand des Datensendens und die verbleibenden Puffer in den Zustand des Datenempfangs.

Wenn die Gesamtmenge der angeforderten Daten kleiner ist als der durch proxy_busy_buffer_size festgelegte Wert

Dann wird b nach Erhalt direkt an a weitergeleitet.

Wenn die Gesamtmenge der angeforderten Daten größer ist als der durch proxy_busy_buffer_size festgelegte Wert

Wenn dann die vom Puffer empfangene Datenmenge den durch proxy_busy_buffer_size festgelegten Wert erreicht

Dieser Teil der Daten wird an einen ersten

Wie in der Abbildung gezeigt, definiert proxy_temp_path das temporäre Dateispeicherverzeichnis

Beispielsweise sendet a eine Anfrage und die gesamte Puffergröße, die der Proxyserver b für diese Anfrage an a zuweist, beträgt 32 KB.

Die Datenmenge, die der C-Dienst auf diese Anfrage antwortet, beträgt jedoch 100 MB und ist damit deutlich größer als die Puffergröße.

In diesem Fall kommt es zu einem Pufferüberlauf, wenn b die Daten von c empfängt.

Diese Überlaufdaten werden in einer temporären Datei auf der Festplatte von b gespeichert.

proxy_temp_path definiert den Pfad, in dem die temporäre Datei gespeichert ist, sowie die Unterverzeichnishierarchie

Der hier definierte Pfad ist /usr/local/nginx/proxy_temp, ein Verzeichnisname

Temporäre Dateien werden in diesem Verzeichnis gespeichert

Die Zahlen 1 und 2 dahinter geben die Unterverzeichnisebene an.

Der vorherige Verzeichnispfad wird von uns selbst definiert und die Unterverzeichnisse werden automatisch vom System erstellt

Die Anzahl der zu erstellenden Unterverzeichnisebenen kann durch die Zahl hinter

Wenn Sie beispielsweise nur 1 schreiben, bedeutet dies, dass es nur eine Unterverzeichnisebene gibt und der Unterverzeichnisname im Format 0-9 angegeben wird.

Per Definition unterstützt proxy_temp_path drei Ebenen von Unterverzeichnissen, was bedeutet, dass Sie drei Zahlen schreiben können.

Wenn Sie beispielsweise 1 schreiben, ist die Nummer und Benennungsmethode der Unterverzeichnisse 0-9, insgesamt 10

Wenn Sie 2 schreiben, bedeutet dies 00-99, insgesamt 100, wenn Sie 3 schreiben, bedeutet dies 000-999, insgesamt 1000 Unterverzeichnisse

Unterverzeichnisse werden entsprechend dieser Nummern benannt.

Wenn Sie 1 3 schreiben, bedeutet dies, dass die Unterverzeichnisse in zwei Ebenen unterteilt sind. Die erste Ebene besteht aus 10 Unterverzeichnissen 0-9

Die zweite Ebene ist 000-999 1000 Unterverzeichnisse, die auch in umgekehrter Reihenfolge geschrieben werden können 3 1

Auf diese Weise verfügt die erste Ebene über 1000 Unterverzeichnisse und jedes Verzeichnis hat 10 Unterverzeichnisse auf der zweiten Ebene.

proxy_max_temp_file_size definiert die Gesamtgröße der temporären Dateien

Wenn hier beispielsweise 100 MB eingestellt ist, bedeutet dies, dass jede temporäre Datei höchstens 100 MB groß ist.

Wenn die Daten der temporären Datei übertragen werden, werden sie automatisch gelöscht

proxy_temp_file_write_size definiert die Gesamtgröße der Daten, die gleichzeitig in temporäre Dateien geschrieben werden

Definieren Sie hier einen Wert wie 8k oder 16k

Wenn die Menge der gleichzeitig geschriebenen Daten geringer als dieser Wert ist, erhöhen Sie die Menge der gleichzeitig geschriebenen Daten

Wenn es höher als dieser Wert ist, reduzieren Sie die gleichzeitig geschriebene Datenmenge

Ist die Menge der gleichzeitig geschriebenen Daten zu hoch, wird die IO-Belastung der Festplatte zu groß, ist sie zu gering, wird die Leistung der Festplatte nicht voll ausgenutzt.

Stellen Sie daher einen Wert ein, der weder zu schnell noch zu langsam ist und der die Leistung der Festplatte voll ausnutzt, ohne sie zu überlasten.

Wie in der Abbildung gezeigt, ist dies ein Beispiel für die Verwendung von Proxy_Buffering

Stellen Sie es zunächst auf „Ein“, d. h. schalten Sie die Pufferfunktion ein.

Die Größe des Pufferbereichs, in dem die Header-Datei gespeichert ist, beträgt 4 KB

Dann gibt es noch 2 Pufferbereiche für andere Daten mit einer Größe von jeweils 4k

Dann beträgt das Datenvolumen von busy_buffers 4k

Wenn die vom Puffer empfangene Datenmenge 4 KB erreicht, werden die Daten gesendet

Anschließend wird die Pfaddefinition für temporäre Dateien definiert, die zwei Ebenen von Unterverzeichnissen definiert.

Sie lauten 1 und 2, was bedeutet, dass die erste Ebene 10 Unterverzeichnisse von 0 bis 9 hat.

Dann hat die zweite Ebene unter jedem Unterverzeichnis 100 Unterverzeichnisse von 00 bis 99.

Dann beträgt die Größe jeder temporären Datei 20 MB

Dann wird die Datenmenge, die gleichzeitig in die temporäre Datei geschrieben wird, als 8k definiert

Reverse-Proxy 06

Wie in der Abbildung gezeigt, müssen Sie zur Verwendung von Proxy-Cache zuerst die Funktion Proxy-Buffering aktivieren.

proxy_cache ist die Cache-Funktion

Client a sendet eine Anfrage. Wenn die von a angeforderten Daten im Cache von Proxyserver b gespeichert wurden,

Dann sendet b die relevanten Daten direkt an a, ohne Daten vom Server c anzufordern.

Wenn die Cache-Funktion nicht aktiviert ist, fordert der Proxyserver B bei jeder Anfrage von Server A Daten von Server C an.

Wenn die von a zweimal angeforderten Daten identisch sind, werden die Daten auch von Server c zweimal angefordert.

Wenn die Cache-Funktion eingeschaltet ist, werden die beim ersten Mal angeforderten Daten im Cache gespeichert. Wenn die gleichen Daten beim zweiten Mal angefordert werden,

b ruft die Daten direkt aus dem Cache ab, anstatt zu c zu gehen, um die Daten abzurufen, wodurch die Belastung des Servers c verringert wird

Zusammenfassend kann durch Pufferung die Belastung des Proxyservers b und durch Zwischenspeicherung die Belastung des Proxyservers c verringert werden.

Wie in der Abbildung gezeigt, wird die Funktion proxy_cache ein- und ausgeschaltet

proxy_cache off bedeutet, die Cache-Funktion auszuschalten

Proxy_Cache-Zone dient zum Öffnen der Cache-Zone, Zone ist der Name der Cache-Zone

Der Name des Cache-Bereichs kann beliebig benannt werden, er kann Zone oder 123 und andere Namen sein

Wenn Sie hier einen Cache-Namen eingeben, wird ein Cache mit diesem Namen geöffnet.

Ab Nginx Version 0.7.66, nach Aktivierung von proxy_cache

Es erkennt außerdem die Headerfelder „Cache-Control“ und „Expire“ im HTTP-Antwortheader des Proxyservers.

Wenn der Wert von Cache-Control „No-Cache“ lautet, werden die Daten dieser Anfrage nicht zwischengespeichert.

Wie in der Abbildung gezeigt, fordert curl -I Daten von einer Website an

Sie können sehen, dass die zurückgegebenen Header-Dateiinformationen den Wert nach Cache-Control enthalten.

Das Vorhandensein von „No-Cache“ bedeutet, dass die von dieser Anforderung zurückgegebenen Daten nicht zwischengespeichert werden.

Wie in der Abbildung gezeigt, wird der Parameter proxy_cache_bypass in bestimmten Situationen gesetzt

Die angefragten Daten werden nicht aus dem Cache, sondern direkt vom Backend-Server bezogen

Die Zeichenfolge nach diesem Parameter ist normalerweise eine Variable von nginx

Beispiel: proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;

Diese Einstellung bedeutet, dass, wenn einer der Werte dieser drei Variablen nicht 0 oder leer ist

Die Antwortdaten werden nicht aus dem Cache, sondern direkt vom Backend-Server abgerufen

Es wird im Moment selten verwendet, informieren Sie sich einfach darüber

Wie in der Abbildung gezeigt, ähnelt proxy_no_cache den obigen Parametern.

Hauptsächlich eingerichtet in einigen Fällen werden die erfassten Daten nicht zwischengespeichert

Beispiel proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;

Diese Einstellung bedeutet, dass wenn der Wert einer der folgenden drei Variablen nicht 0 oder leer ist

Eine Zwischenspeicherung der erfassten Daten erfolgt nicht.

Wie in der Abbildung gezeigt, ähnelt das Format dieses Parameters den obigen Parametern. Im Allgemeinen muss es nicht festgelegt werden. Behalten Sie einfach den Standardwert bei.

Wie in der Abbildung gezeigt, ist proxy_cache_path ein Parameter zum Festlegen der spezifischen Konfiguration des Cache-Bereichs

Der Cache kann neben dem Speicherplatz im Arbeitsspeicher auch Speicherplatz auf der Festplatte für den Cache reservieren.

path ist ein Verzeichnispfad als Cache-Pfad anzugeben, der Cache wird hier gespeichert

levels=1:2 Dies gibt die Verzeichnisebene an. Die erste Zahl legt die erste Ebene fest.

Die zweite Zahl legt die zweite Schicht fest

1 bedeutet 0-9 af, insgesamt 16 Zeichen, jedes Verzeichnis besteht aus einem einzelnen Zeichen, insgesamt 16 Verzeichnisse

2 bedeutet 0-9 af, insgesamt 16 Zeichen, aber jedes Verzeichnis besteht aus zwei Zeichen, 00, 01, 04, 2f usw., es gibt mehr als 200 Kombinationen

Kurz gesagt legt dieser Parameter die Unterverzeichnisebene fest. Die erste Zahl stellt die erste Ebene dar.

Die zweite Zahl gibt die zweite Schicht an

keys_zone wird verwendet, um den Namen und die Größe der Speicherzone festzulegen

keys_zone=my_zone:10m bedeutet, dass der Name der Zone my_zone ist

Dann beträgt die Zonengröße 10 MB

inaktiv ist die Zeit, nach deren Ablauf der Cache gelöscht wird.

Wenn der Wert in der Abbildung beispielsweise auf 300 s eingestellt ist, bedeutet dies, dass, wenn innerhalb von 300 Sekunden nicht auf die Daten zugegriffen wurde,

Anschließend werden die Daten aus dem Cache gelöscht.

max_size ist die maximale Datenmenge, die im Festplattencache gespeichert werden kann

Hier ist es beispielsweise auf 5g eingestellt, das oben eingestellte Verzeichnis ist /data/nginx_cache/

Das Verzeichnis auf dieser Festplatte kann bis zu 5 g Daten speichern.

Das System löscht die Daten zuerst mit den geringsten Besuchen und stellt dann die neuen Daten ein.

Die Linie proxy_cache_path kann nicht in die Serverklammungen der Konfigurationsdatei geschrieben werden.

In den HTTP -Klammern geschrieben werden

Bearbeiten Sie beispielsweise zuerst die Konfigurationsdatei nginx.conf

Wie in der Abbildung gezeigt, fügen Sie den Code von Proxy_Cache_Path außerhalb des Servers hinzu

Wie in der Abbildung gezeigt,

Da das angegebene Cache -Verzeichnis/data/nginx_cache/nicht vorhanden ist, müssen wir es hier erstellen

Kompilieren Sie wie in der Abbildung eine virtuelle Host -Konfigurationsdatei und fügen Sie proxy_cache my_zone in Position hinzu.

Wenn dieser virtuelle Host eine Anfrage erhält, verwendet er den Cache -Space my_zone

Die spezifische Definition des My_zone -Cache -Speicherplatzes wurde in der Konfigurationsdatei nginx.conf definiert

Der Konfigurationsinhalt in nginx.conf ist für alle virtuellen Hosts gültig

Also, wenn my_zone in nginx.conf definiert ist

Verwenden Sie dann proxy_cache my_zone in allen virtuellen Host -Konfigurationsdateien

Diese virtuellen Hosts können alle den Cache -Space my_zone verwenden

Speichern und beenden Sie dann, um die Konfigurationsdatei neu zu laden, um wirksam zu werden

Für den normalen Gebrauch müssen Sie diese beiden Codezeilen nur hinzufügen, um den Cache erfolgreich zu konfigurieren.

Wie in der Abbildung gezeigt, ist ein weiteres Problem, dass die Erlaubnis des Nginx -Dienstes selbst niemand ist

Das Verzeichnis gerade jetzt wurde mit Root -Privilegien erstellt

Hier müssen wir also die Eigentümergruppe des Cache -Verzeichnisses in niemanden ändern

Auf diese Weise wird es keine Erlaubnisprobleme geben, wenn der Nginx -Dienst dieses Verzeichnis betreibt

Überprüfen Sie wie in der Abbildung den Inhalt des Verzeichnisses/data/nginx_cache/des Verzeichnisses

Sie können das Verzeichnis der ersten Ebene von 0-9 AF sehen

Geben Sie das 0-Verzeichnis ein und Sie können das Verzeichnis der zweiten Ebene sehen, das aus zwei Ziffern besteht.

Zusammenfassend lässt sich sagen

Es kann in nignx.conf definiert werden, damit jeder virtuelle Host es verwenden kann

Nach dem Definieren von Proxy_Cache_Path im virtuellen Host -Server, auf dem der Cache verwendet werden muss

Konfigurieren Sie proxy_cache zone_name

Zone_Name ist der in Proxy_Cache_Path definierte Cache -Speicherplatz -Name

Auf diese Weise kann der entsprechende virtuelle Host diesen Cache -Speicherplatz verwenden

Das obige ist der detaillierte Inhalt der detaillierten Erläuterung von NGINX -Vorwärtsproxy und Reverse -Proxy.

Das könnte Sie auch interessieren:
  • Verwenden des Nginx-Forward-Proxys zur Implementierung einer Analyse des Intranet-Domänennamen-Weiterleitungsprozesses
  • Diagramm des Prozessprozesses zur Implementierung von Richtungsproxy über Nginx
  • Unterschied und Prinzipanalyse des Nginx-Forward- und Reverse-Proxy
  • Eine universelle Nginx-Schnittstelle zur Implementierung der Reverse-Proxy-Konfiguration
  • Interviewfragen zu Forward Proxy und Reverse Proxy in der verteilten Architektur

<<:  Lernen Sie, wie Sie mit charAt() in JavaScript die am häufigsten vorkommenden Zeichen und deren Anzahl zählen.

>>:  Beheben Sie den Gruppierungsfehler Ausdruck Nr. 1 der SELECT-Liste ist nicht in der GROUP BY-Klausel enthalten und enthält nicht aggregierte Werte in MySQL-Versionen über 5.7

Artikel empfehlen

Zusammenfassung der MySQL-DML-Anweisungen

DML-Operationen beziehen sich auf Operationen an ...

Detaillierte Erklärung zur Verwendung der Linux-Umleitung

Ich glaube, dass jeder manchmal Daten kopieren un...

Detaillierte Erläuterung der bidirektionalen Docker-Netzwerkverbindung

Docker-Netzwerk anzeigen Docker-Netzwerk ls [root...

So implementieren Sie ein Hover-Dropdown-Menü mit CSS

Wie üblich werde ich heute über einen sehr prakti...

HTML-Tabellen-Tag-Tutorial (26): Zellen-Tag

Die Attribute des <TD>-Tags werden verwende...

Einfache Implementierung von Mini-Vue-Rendering

Inhaltsverzeichnis Vorwort Ziel Erster Schritt: S...

Professionelles und nicht-professionelles Webdesign

Zunächst einmal hängt die Gestaltung des Webseiten...

So löschen Sie eine Eigenschaft eines Objekts in JavaScript

1. löschen delete ist die einzige wirkliche Mögli...

So zeigen Sie die Netzwerkroutingtabelle in Ubuntu an

Was sind Routing und Routing-Tabellen in Linux? U...