WeiterleitungsproxyAngenommen, 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-ReverseproxyErstellen 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 02Wie 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 03Wie 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 04Wie 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
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 05proxy_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 06Wie 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
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:
|
DML-Operationen beziehen sich auf Operationen an ...
Ich glaube, dass jeder manchmal Daten kopieren un...
Docker-Netzwerk anzeigen Docker-Netzwerk ls [root...
1. Problem Manchmal, wenn wir uns bei Mysql anmel...
Dieser Artikel beschreibt die Linux-Dateiverwaltu...
Inhaltsverzeichnis 1. Was für eine Art von Backup...
Wie üblich werde ich heute über einen sehr prakti...
Die Attribute des <TD>-Tags werden verwende...
Inhaltsverzeichnis Was ist cgroup Zusammensetzung...
Inhaltsverzeichnis Vorwort Ziel Erster Schritt: S...
Zunächst einmal hängt die Gestaltung des Webseiten...
Aktivieren Sie den Dienst, wenn Sie ihn benötigen...
1. löschen delete ist die einzige wirkliche Mögli...
Erstellen Sie eine ansprechende Anmelde- und Regi...
Was sind Routing und Routing-Tabellen in Linux? U...