1: Verstehen Sie die Bedeutung von Adressumschreibung und Adressweiterleitung. Adressumschreibung und Adressweiterleitung sind zwei unterschiedliche Konzepte. Durch das Umschreiben von Adressen wird eine Adressstandardisierung erreicht. Beispielsweise können wir www.baidu.com in die Adressleiste eingeben. Wir können auch www.baidu.cn eingeben. Am Ende wird es in www.baidu.com umgeschrieben. In der Adressleiste des Browsers wird auch www.baidu.com angezeigt. Adressweiterleitung: Damit ist der Vorgang gemeint, bei dem nach dem Erreichen eines Datenpakets bei einer Netzwerkdatenübertragung an einem Router oder einer Bridge das Gerät die Paketadresse prüft und die Daten an das nächstgelegene lokale Netzwerk weiterleitet. Daher gibt es zwischen der Adressumschreibung und der Adressweiterleitung die folgenden Unterschiede: 1. Durch das Umschreiben der Adresse wird die Adresse im Browser geändert und auf die neueste Adresse des Browsers umgeschrieben. Durch die Adressweiterleitung wird die Adresse des Browsers nicht geändert. 2: Die Verwendung von Rewrite-Anweisungen verstehen Diese Anweisung wird verwendet, um die URI durch die Verwendung regulärer Ausdrücke zu ändern. Es können eine oder mehrere Anweisungen gleichzeitig existieren. Die URLs müssen der Reihe nach abgeglichen und verarbeitet werden. Diese Direktive kann im Serverblock oder im Standortblock konfiguriert werden. Ihre grundlegende Syntaxstruktur ist wie folgt: Regex-Ersetzung neu schreiben [Flag]; Die Bedeutung von „Umschreiben“: Diese Anweisung wird zum Umschreiben von URLs verwendet. Das Flag hat die folgenden Werte:
Zum Beispiel die folgenden Beispiele: umschreiben ^/(.*) http://www.baidu.com/$1 permanent; veranschaulichen: Lassen Sie uns eine einfache Demo durchführen, um dies zu simulieren: 1. In unserem Testprojekt gibt es eine app.js. Der Code lautet wie folgt: const Koa = erfordern('koa'); const app = new Koa(); const router = erfordern('koa-router')(); // Route hinzufügen router.get('/', ctx => { ctx.body = '<h1>Willkommen auf der Indexseite</h1>'; }); router.get('/home', ctx => { ctx.body = '<h1>Willkommen auf der Homepage</h1>'; }); router.get('/404', ctx => { ctx.body = '<h1>404…</h1>' }); // Routing-Middleware laden app.use(router.routes()); app.listen(3001, () => { console.log('Server läuft unter http://localhost:3001'); }); Führen Sie dann node app.js in der Befehlszeile aus, und dann können wir http://localhost:3001 im Browser aufrufen, um auf unsere entsprechende Seite zuzugreifen. Aber jetzt möchte ich das Node-Projekt auf meinem lokalen Nginx-Server bereitstellen. Bitte lesen Sie meinen Artikel zur Nginx-Installation. Dann möchte ich den Domänennamen verwenden, um auf unser Projekt zuzugreifen, also müssen wir ihn in unserer nginx.conf konfigurieren: cd /usr/local/etc/nginx Verwenden Sie dann den Befehl: sudo open /usr/local/etc/nginx/nginx.conf -a „sublime text“, um nginx.conf zu öffnen und es wie folgt zu konfigurieren: Arbeiterprozesse 1; Ereignisse { Arbeiterverbindungen 1024; } http { mime.types einschließen; Standardtyp Anwendung/Oktett-Stream; sendfile an; #tcp_nopush ein; #keepalive_timeout 0; KeepAlive-Timeout 65; #gzip ein; Server { hören Sie 8081; Servername localhost; Standort / { Stamm-HTML; Index Index.html Index.htm; } Fehlerseite 500 502 503 504 /50x.html; Standort = /50x.html { Stamm-HTML; } } Server { hören Sie 8088; Servername xxx.abc.com; Standort / { Proxy-Passwort http://127.0.0.1:3001; umschreiben ^/(.*) http://www.baidu.com permanent; } } } Wie im obigen Code gezeigt, ist meine Abhörportnummer 8088 und die Servername-Konfiguration ist auf xxx.abc.com eingestellt. Wenn wir dann http://xxx.abc.com:8088/ besuchen, wird zuerst per Reverse-Proxy auf die Seite umgeleitet, die dem Knoten unter unserem http://127.0.0.1:3001 entspricht. Nachdem der Reverse-Proxy abgeschlossen ist, wird per Rewrite auf die Baidu-Seite umgeleitet. Nachdem die obige Konfiguration abgeschlossen ist, müssen wir den Nginx-Server neu starten. Verwenden Sie dazu den folgenden Befehl: Wenn wir dann http://xxx.abc.com:8088/ im Browser aufrufen, wird die Ausführung wie in der folgenden Abbildung gezeigt durchgeführt. Zuerst wird http://xxx.abc.com:8088/ (301) dauerhaft umgeleitet, dann wird Baidu (307) aufgerufen, vorübergehend auf die Baidu-Seite umgeleitet und schließlich wird die Adresse der Baidu-Seite geladen; wie in der folgenden Demonstration gezeigt: Aber wenn ich „permanent“ in „Umleitung“ ändere, beispielsweise nach der Nginx-Konfiguration: „rewrite ^/(.*) http://www.baidu.com redirect;“, wird es zu einer temporären 302-Umleitung. Wie unten dargestellt: Drei: Die if-Anweisung verstehen Diese Direktive wird verwendet, um bedingte Beurteilungen zu unterstützen und basierend auf den Ergebnissen der bedingten Beurteilung verschiedene Nginx-Konfigurationen auszuwählen. Wir können diese Direktive im Serverblock oder im Standortblock konfigurieren. Ihre grammatische Struktur ist: if (Bedingung) { // .... } Bedingung ist ein Boolescher Wert mit der Bedeutung „Wahr“/„Falsch“. Für die Rewrite-Direktive stehen die folgenden globalen Variablen zur Verfügung: 1. $args: Diese Variable speichert die Anforderungsanweisungen in der Anforderungs-URL. Beispielsweise in http://127.0.0.1:3001?arg1=value1&arg2=value2 Die grundlegende Syntax eines regulären Ausdrucks lautet: 1. Variablen abgleichen „~“ bedeutet, dass beim Abgleich zwischen Groß- und Kleinschreibung unterschieden wird. Zum Beispiel: wenn ($http_user_agent ~ MSIE) { // Bedeutung des Codes: ob der Wert $http_user_agent den MSIE-String enthält, wenn ja, ist er true, andernfalls false } 2. Stellen Sie fest, ob die angeforderte Datei vorhanden ist „-f“ Diese Bedingung ist erfüllt, wenn die angeforderte Datei existiert. if (-f $Anforderungsdateiname) { //Überprüfen, ob die angeforderte Datei existiert} wenn (!-f $request_filename) { //Überprüfen, ob die angeforderte Datei nicht existiert} 3. Überprüfen Sie mit '-d' und '!-d', ob das angeforderte Verzeichnis existiert. Mit „-d“ wird „true“ zurückgegeben, wenn das angeforderte Verzeichnis existiert. Andernfalls wird „false“ zurückgegeben. Jetzt verwenden wir die if-Direktive, um nginx etwas Urteilsvermögen hinzuzufügen. Wenn wir beispielsweise http://xxx.abc.com:8080/home besuchen und $host = 'xxx.abc.com' ist, werden wir umleiten. Der nginx-Konfigurationscode lautet wie folgt: Server { hören Sie 8088; Servername xxx.abc.com; Standort / { Proxy-Passwort http://127.0.0.1:3001; wenn ($host = 'xxx.abc.com') { Umschreiben ^/(.*) http://www.cnblogs.com Weiterleitung; } } } Wenn wir mit nginx wie oben konfiguriert sind und http://xxx.abc.com:8088 aufrufen, erfolgt eine Weiterleitung zu http://www.cnblogs.com. Beispielsweise mehr Beurteilungen, wie etwa, ob auf den Benutzeragenten über ein Mobiltelefon zugegriffen wird, direkt zu einer bestimmten Seite gesprungen wird oder ob die „if“-Beurteilung verwendet wird. Zum Beispiel: wenn ( $http_user_agent ~* "(Android)|(iPhone)|(Mobil)|(WAP)|(UCWEB)" ){ umschreiben ^/$ http://www.cnblogs.com permanent; } 4: Anti-Hotlinking und Nginx-Konfiguration verstehen Was ist Anti-Hotlinking? Unter Hotlinking versteht man das Stehlen von Bildlinks, also das Stehlen von Bildern anderer und deren Verwendung auf dem eigenen Server. Unter Anti-Hotlinking versteht man das Verhindern, dass andere meine Bilder stehlen. Das Implementierungsprinzip von Anti-Hotlinking: Wenn ein Client Ressourcen von einem Server anfordert, überträgt der Server im Allgemeinen nicht alle Ressourcen auf einmal vollständig an den Client zurück, um die Netzwerkbandbreite zu reduzieren und die Antwortzeit zu verbessern. Wenn Sie beispielsweise eine Webseite anfordern, wird zuerst der Textinhalt der Webseite zurückgegeben. Wenn der Clientbrowser beim Parsen des Textes feststellt, dass ein Bild vorhanden ist, initiiert er erneut eine Anforderung der Bildressource an den Server, und der Server sendet die gespeicherte Bildressource an den Client. Aber was passiert, wenn dieses Bild mit dem Server einer anderen Site verknüpft ist? In meinem Projekt habe ich beispielsweise auf ein Bild von Taobao verwiesen. Wenn unsere Website dann neu geladen wird, wird der Taobao-Server angefordert, was wahrscheinlich zu einer Belastung des Taobao-Servers führt. Das ist also Hotlinking. Daher müssen wir Anti-Hotlinking implementieren. Implementieren Sie Anti-Hotlinking: Verwenden Sie das Referer-Header-Feld im Anforderungsheader des HTTP-Protokolls, um die Quelladresse der aktuell aufgerufenen Webseite oder Datei zu ermitteln. Durch den Wert dieses Header-Felds können wir die Quelladresse des Zugriffs auf die Zielressource ermitteln. Handelt es sich bei der Zielquelladresse nicht um die URL unserer eigenen Site, ergreifen wir in diesem Fall Sperrmaßnahmen, um Hotlinking zu verhindern. Beachten Sie jedoch, dass der Wert im Referer-Header-Feld geändert werden kann. Daher kann diese Methode Hotlinking nicht vollständig verhindern. Verwenden Sie die Rewrite-Funktion des Nginx-Servers, um Anti-Hotlinking zu implementieren. In Nginx gibt es die Direktive valid_referers. Mit dieser Direktive kann der Wert im Header-Feld Referer abgerufen und der globalen Nginx-Variable $invalid_referer basierend auf diesem Wert ein Wert zugewiesen werden. Wenn das Referer-Headerfeld keinen Wert enthält, der mit der valid_referers-Direktive übereinstimmt, wird der Variable $invalid_referer der Wert 1 zugewiesen. Die grundlegende Syntax der Direktive valid_referers lautet wie folgt: valid_referers keine | blockiert | Servernamen | Zeichenfolge keine: Erkennt das Fehlen des Referer-Headerfelds. server_names: Legen Sie eine oder mehrere URLs fest und prüfen Sie, ob der Wert des Referer-Headerfelds eine der URLs ist. Wenn wir also die Direktive valid_referers und die Variable $invalid_referer haben, können wir Anti-Hotlinking über die Rewrite-Funktion implementieren. 1. Die folgende Tabelle listet die Anti-Hotlink-Konfiguration basierend auf dem angeforderten Dateityp auf: Server { hören Sie 8080; Servername xxx.abc.com Standort ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ { valid_referers, keine blockiert, www.xxx.com, www.yyy.com, *.baidu.com, *.tabobao.com; wenn ($ungültiger_Referrer) { umschreiben ^/ http://www.xxx.com/images/forbidden.png; } } } Wenn bei der obigen Basiskonfiguration über eine Netzwerkverbindung Bildressourcen mit den Suffixen gif, jpg oder png, Medienressourcen mit den Suffixen swf oder flv oder komprimierte Ressourcen mit den Suffixen rar oder zip angefordert werden und festgestellt wird, dass das Referrer-Headerfeld nicht der valid_referers-Direktive entspricht, bedeutet dies, dass die Anforderung nicht für Ressourcen von dieser Site bestimmt ist. Standort ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ Diese Konfiguration bedeutet, dass der Dateityp für Anti-Hotlinking festgelegt wird. valid_referers none blocked www.xxx.com www.yyy.com *.baidu.com *.tabobao.com; Es kann als Whitelist verstanden werden, eine Whitelist von Domänennamen, die Dateilinks zulassen. Wenn die angeforderte Ressourcendatei nicht mit diesen Domänennamen beginnt, bedeutet dies, dass die angeforderte Ressourcendatei keine Anforderung unter dieser Domäne ist und daher als Hotlink beurteilt werden kann. Wenn die Anfrage nicht unter dieser Domäne liegt, wird Rewrite verwendet, um auf das Bild http://www.xxx.com/images/forbidden.jpg umzuleiten. Wenn dieses Bild beispielsweise ein x oder ein anderes Logo ist, können andere Websites nicht auf Ihr Bild zugreifen. 2. Die Konfiguration zur Implementierung von Anti-Hotlinking basierend auf dem Anforderungsverzeichnis lautet wie folgt: Server { hören Sie 8080; Servername xxx.abc.com Speicherort /Datei/ { root /server/datei/; valid_referers, keine blockiert, www.xxx.com, www.yyy.com, *.baidu.com, *.tabobao.com; wenn ($ungültiger_Referrer) { umschreiben ^/ http://www.xxx.com/images/forbidden.png; } } } Damit ist dieser Artikel mit der detaillierten Erläuterung der Umleitungskonfiguration und -praxis von Rewrite in Nginx abgeschlossen. Weitere relevante Inhalte zur Nginx Rewrite-Umleitung 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:
|
<<: Beispiel für die Ausführung eines MySQL-Befehlszeilenskripts
>>: Fallstudie zu JavaScript Anti-Shake
React-Lebenszyklus Zwei Bilder zum besseren Verst...
veranschaulichen: VMware IOInsight ist ein Tool, ...
Socat muss vor der Installation von rabbitmq inst...
Hinweis 1: Lösen Sie das Problem der langsamen Ve...
Die Tabellenpartitionierung unterscheidet sich vo...
Die Pseudoklasse „Before/After“ entspricht dem Ei...
Vorwort Zuerst wollte ich es mit wget auf CentOS8...
Datenblatt: Von Spalte zu Zeile: mit max(case whe...
In diesem Artikelbeispiel wird der spezifische Co...
Nachdem Sie Docker auf dem Linux-Server installie...
In diesem Artikelbeispiel wird der spezifische Co...
Ich spiele jetzt schon eine Weile mit Diagrammen ...
<br />Dies stammt aus dem Inhalt von „Web Fr...
Wenn wir Vue zur Entwicklung verwenden, kann eine...
Im vorherigen Artikel haben wir Docker verwendet,...