Nginx

So verwenden Sie die URL-Umschreibung

So verwenden Sie die URL-Umschreibung
URL-Rewriting ist ein Prozess, bei dem die Anforderungs-URL in etwas anderes geändert wird, wie es im Webserver definiert ist. Nginx verwendet das Modul ngx_http_rewrite_module, das hauptsächlich Return- und Rewrite-Direktiven zum Umschreiben verwendet. Abgesehen von diesen in diesem Modul definierten Direktiven kann die in ngx_http_map_module definierte map-Direktive auch verwendet werden, um URLs einfach umzuschreiben. In diesem Handbuch werden 2 Hauptdirektiven erklärt - return, rewrite und ihre Flags, ihre Funktionsweise und ihre Anwendungen.

Voraussetzungen

Diese Anleitung ist optimiert für Nginx 1.0.1 und höher, daher wird dringend empfohlen, die vorhandene Nginx-Instanz auf die oben genannte oder eine höhere Version zu aktualisieren. Einige der Befehle und Syntaxen funktionieren jedoch möglicherweise noch für alle Versionen vor der oben genannten Version. Da es in diesem Handbuch um das Umschreiben von URLs geht, was ein etwas fortgeschrittenes Thema ist, wird davon ausgegangen, dass das Publikum das Installationsverfahren von Nginx kennt und daher hier nicht erklärt wird explained.

Rückkehr

Return ist die grundlegende Direktive, die das Umschreiben von URLs durchführt und einfach zu verstehen ist. Es verwendet keine regulären Ausdrücke, kann aber Variablen zum Parsen enthalten, die aus dem Pfad des Standortblocks erfasst werden. Normalerweise wird die Return-Direktive verwendet, um die Anforderungs-URL an einen anderen Ort umzuleiten, und verwendet daher häufig HTTP-Codes wie 301 für die permanente Umleitung und 302 für die temporäre Umleitung. Die folgenden Codeausschnitte veranschaulichen einige der Anwendungsfälle der Return-Direktive.

Das folgende Code-Snippet leitet die Anfrage-URL an Google weiter.com. Es kann entweder direkt unter dem Servercodeblock oder unter einem Standortcodeblock verwendet werden, aber stellen Sie sicher, dass Sie nicht auf dieselbe Domain umleiten, um eine Umleitungsschleife zu vermeiden

301 https://google . zurückgeben.com;

Das folgende Code-Snippet leitet die Anfrage-URL an Nucuta weiter.com zusammen mit dem Pfad, zum Beispiel enthält das obige Beispiel keinen Pfad, keine Parameter, und daher wird unabhängig davon, welche URL in die Adressleiste eingegeben wird, die Anfrage an die Root-Domain von Google umgeleitet, während im folgenden Beispiel der Pfad wird zusammen mit den Parametern ohne den Domainnamen übertragen. Alternativ kann $is_args$args verwendet werden, aber dann sollte anstelle von $request_uri die Variable $uri verwendet werden, da $request_uri auch Parameter der URL enthält. Wenn die Anforderung darin besteht, auf ein anderes Verzeichnis derselben Domain umzuleiten, verwenden Sie in der return-Direktive die Variable $host anstelle des Domainnamens, zum Beispiel im folgenden Beispiel anstelle von nucuta.com, verwende $host.

301 zurückgeben https://nucuta.com$request_uri;

Der folgende Codeausschnitt leitet die eingehende Anfrage an das Pfadverzeichnis derselben Domain und das Schema um, dh wenn der folgende Codeausschnitt in http://Linux verwendet wird.com, und wenn ein Besucher eine Anfrage an sie gestellt hat, wird sie an das Pfadverzeichnis umgeleitet. Daher ist der folgende Codeausschnitt nützlich, wenn Sie eine große Anzahl von Websites verwalten. Hier definiert $schema das Protokoll der URL, wie FTP, HTTP, HTTPS, und $host definiert die Domain des aktuellen Servers mit ihrer Domain-Endung, wie etwa Google.com, Linux.Netto usw. Da dies keine Protokollumleitung wie von HTTP zu HTTPs durchführt, muss dies wie im zweiten Beispiel manuell durchgeführt werden done.

Rückgabe 301 $schema://$host/pfad;
if ($schema != "https")
301 https://$host$request_uri zurückgeben;

Ein weiterer nützlicher Anwendungsfall der Return-Direktive ist die Möglichkeit, Regex-Variablen einzuschließen, aber dafür sollte der reguläre Ausdruck im Location-Block angegeben werden und ein Muster erfassen, dann kann das erfasste Muster mit der vorhandenen URL in der Return-Direktive kombiniert werden für Umleitungszwecke, zum Beispiel im folgenden Beispiel, wenn eine Anfrage zum Zugriff auf eine Textdatei gestellt wird, erfasst sie den Namen der Textdatei im Speicherortblock, übergibt diesen Namen dann an die Return-Direktive und kombiniert dann die Return-Direktive mit dem vorhandenen URL, um die Anfrage in ein anderes Verzeichnis umzuleiten.

Standort ~* ^/([^/]+.txt)$
gib 301 /chrome/$1 zurück;

Umschreiben

Rewrite ist eine Direktive, die verwendet wird, um URLs intern im Webserver umzuschreiben, ohne den zugrunde liegenden Mechanismus der Clientseite offenzulegen. Gemäß seiner Syntax wird es mit regulären Ausdrücken verwendet. Die grundlegende Syntax lautet wie folgt. Der Regex-Platzhalter dient zur Verwendung regulärer Ausdrücke, der Ersatzplatzhalter zum Ersetzen der übereinstimmenden URL, während das Flag zum Manipulieren des Ausführungsflusses dient. Im Moment sind die Flags, die in der rewrite-Direktive verwendet werden, break, permanent, redirect und last.

Regex-Ersatz neu schreiben [Flag];

Bevor Sie mit regulären Ausdrücken, Ersetzungen, Mustererfassung und Variablen fortfahren, ist es wichtig zu wissen, wie Flags das Verhalten der internen Engine von Nginx bewirken. Es gibt vier Haupt-Flags, die mit der Rewrite-Direktive verwendet werden, wie bereits erwähnt, darunter permanente.

Umleiten

Das Umleitungs-Flag wird verwendet, um dem Browser zu signalisieren, dass die Umleitung temporär ist, was auch bei Suchmaschinen-Crawlern hilfreich ist, um zu erkennen, dass die Seite vorübergehend entfernt wurde und einige Zeit später an ihrem ursprünglichen Ort wiederhergestellt wird. Wenn die Seite den Wert 302 anzeigt, nehmen Suchmaschinen keine Änderungen an ihrer Indexierung vor, und daher sehen Besucher bei der Suche immer noch die ursprüngliche Seite im Suchmaschinenindex, was bedeutet, dass die alte Seite nicht entfernt wird und außerdem alle qualifizierten , wie Page Rank, Link Juice werden nicht an die neue Seite weitergegeben.

Lage /

umschreiben ^ http://155.138.XXX.XXX/Pfad-Umleitung;

Dauerhaft

Das Permanent-Flag wird verwendet, um dem Browser zu signalisieren, dass die Umleitung dauerhaft ist, was auch für Suchmaschinen-Crawler hilfreich ist, um zu erkennen, dass die Seite dauerhaft entfernt wird und NICHT später an ihrem ursprünglichen Ort wiederhergestellt wird, wie beim vorübergehenden Verschieben. Wenn die Seite anzeigt, dass sie 301 ist, nehmen Suchmaschinen einige Änderungen an ihrer Indexierung vor, und daher sehen Besucher bei der Suche die neue Seite im Suchmaschinenindex anstelle der alten Seite, was bedeutet, dass die alte Seite durch die neue Seite ersetzt wird die Qualitäten wie Page Rank, Link Juice werden an die neue Seite weitergegeben.

Lage /

umschreiben ^ http://155.138.XXX.XXX/Pfad permanent;

Regulärer Ausdruck, Mustererfassung und Variablen.

Nginx verwendet Reguläre Ausdrücke stark mit der Rewrite-Direktive, und daher ist es in diesem Segment praktisch, Reguläre Ausdrücke zu kennen.  Es gibt mehrere Arten von regulären Ausdrücken, aber Nginx verwendet Perl-kompatible reguläre Ausdrücke, auch bekannt als PCRE. Ein Testtool für reguläre Ausdrücke ist nützlich, um sicherzustellen, dass das geschriebene Muster tatsächlich funktioniert, bevor Sie es in der Nginx-Konfigurationsdatei verwenden. Diese Anleitung empfiehlt https://regex101.com/ als Tool, und alle folgenden Beispiele werden mit dem oben genannten Tool gründlich getestet.

Reguläre Ausdrücke

umschreiben ^/fr/(.*)$ http://nucuta.com/$1 dauerhaft;

Ein typisches Muster einer Rewrite-Direktive geht wie oben, es enthält die Rewrite-Direktive am Anfang, dann mit einem Leerzeichen das „Muster“ im regulären Ausdruck, dann mit einem Leerzeichen das „Ersetzen“, dann schließlich das „Flag“. Die rewrite-Direktive kann an einer beliebigen Stelle innerhalb der Server-Klammern platziert werden, es wird jedoch empfohlen, sie nach Angabe der Direktiven listen, server_name, root und index beizubehalten. Wenn ein Besucher eine Anfrage an den Server stellt, wird eine URL zusammen mit der Anfrage gesendet. Wenn die URL mit dem in der rewrite-Direktive angegebenen Muster für reguläre Ausdrücke übereinstimmt, wird sie basierend auf der Ersetzung neu geschrieben, dann wird der Ausführungsfluss basierend manipuliert auf der flagge.

Das Muster des regulären Ausdrucks verwendet Klammern, um die Gruppe anzugeben, deren Teilzeichenfolge aus der URL extrahiert wird, wenn das Regex-Muster mit der URL der Anfrage übereinstimmt, dann wird diese aus der URL entnommene Teilzeichenfolge der Variablen im zugewiesen „Ersatz“ der Rewrite-Direktive. Wenn es mehrere übereinstimmende Gruppen gibt, wird die Teilzeichenfolge jeder übereinstimmenden Gruppe den Variablen in „Ersetzung“ in numerischer Reihenfolge zugewiesen, d.h. Teilzeichenfolge der ersten übereinstimmenden Gruppe wird der ersten Variablen ($1) zugewiesen, Teilzeichenfolge der die zweite übereinstimmende Gruppe wird der zweiten Variablen ($2) zugewiesen, und so weiter.

Von 4 Flaggen wurden in dieser Anleitung bereits 2 Flaggen erklärt, die restlichen sind die letzten und brechen. Bevor Sie verstehen, wie die verbleibenden Flags funktionieren, ist es wichtig zu verstehen, wie sich die Nginx-Engine mit Rewrite-Direktiven verhält. Wenn eine URL zusammen mit einer Anfrage gesendet wird, versucht die Nginx-Engine, sie mit einem Standortblock abzugleichen. Unabhängig davon, ob sie übereinstimmen oder nicht, wenn eine Direktive wie rewrite, return stolpert, wird sie sequentiell ausgeführt. Wenn die gesendete URL mit dem Muster einer Rewrite-Direktive übereinstimmt, führt die Nginx-Engine die gesamte Konfigurationsdatei aus, unabhängig davon, wo die Rewrite-Direktive als Schleife angegeben ist, bis die neu geschriebene URL mit einem der Standortblöcke übereinstimmt.

Die folgende URL wird als Demonstration verwendet, um zu erklären, wie sich der Ausführungsfluss der Nginx-Engine durch beide Flags mit der Rewrite-Direktive verhält. Der folgende Screenshot zeigt die Dateistruktur des Webservers.

http://155.138.XXX.XXX/Browser/Beispiel.txt (die als Anfrage gesendete URL)

Wenn keine Flagge verwendet wird

Wenn kein Flag verwendet wird, werden beide Rewrite-Direktiven nacheinander ausgeführt; daher wird die erste URL in der folgenden Liste zu 2nd, dann 2nd URL wird zur letzten URL Also wenn die Probe.txt-Datei im Browser-Ordner angefordert wird, dient der Webserver tatsächlich der Probe.txt-Datei im Stammordner. Da das Umschreiben der URL vollständig vom Browser abstrahiert wird, sieht es beim Serving keinen Unterschied im Vergleich zur Return-Direktive, die dem Browser angibt, ob die Anfrage mit einer HTTP-Nummer umgeleitet wurde oder nicht.

  1. http://155.138.XXX.XXX/Browser/Beispiel.TXT
  2. http://155.138.XXX.XXX/Chrom/Muster.TXT
  3. http://155.138.XXX.XXX/Probe.TXT
Lage /

umschreiben ^/browser/(.*)$ /Chrom/$1;
umschreiben ^/chrom/(.*)$ /$1;
Standort /chrom
try_files $uri $uri/ =404;

Wenn entweder Break oder Last Flag außerhalb des Standortblocks angegeben ist

Wenn entweder break oder last flag außerhalb des Location-Blocks angegeben wird, werden die Rewrite-Direktiven nach der passenden Rewrite-Direktive überhaupt nicht geparst, zum Beispiel wird im folgenden Beispiel die Anforderungs-URL in die 2 . umgeschriebennd eine in der folgenden Liste, unabhängig vom verwendeten Flag, und das war's.

  1. http://155.138.XXX.XXX/Browser/Beispiel.TXT
  2. http://155.138.XXX.XXX/Chrom/Muster.TXT
Lage /

umschreiben ^/browser/(.*)$ /chrome/$1 zuletzt;#break
umschreiben ^/chrom/(.*)$ /$1 zuletzt;#Pause
Standort /chrom
try_files $uri $uri/ =404;

Wenn das letzte Flag innerhalb eines Standortblocks verwendet wird

Wenn das letzte Flag innerhalb eines Location-Blocks verwendet wird, stoppt es das Parsen weiterer Rewrite-Direktiven innerhalb dieses bestimmten Location-Blocks und springt in den nächsten Rewrite-Location-Block, wenn die neu geschriebene URL mit dem Pfad dieses Location-Blocks übereinstimmt, dann führt es die nachfolgende Rewrite-Direktive darin.

  1. http://155.138.XXX.XXX/Browser/Beispiel.TXT
  2. http://155.138.XXX.XXX/Chrom/Muster.TXT
  3. http://155.138.XXX.XXX/Probe.TXT
Lage /
umschreiben ^/browser/(.*)$ /Chrom/$1 zuletzt;

Standort /chrom
umschreiben ^/chrom/(.*)$ /$1 zuletzt;
try_files $uri $uri/ =404;

Wenn das Break-Flag innerhalb eines Standortblocks verwendet wird

Break-Flag hingegen, wenn es sich innerhalb eines Location-Blocks befindet, stoppen Sie das Parsen von Rewrite-Direktiven, unabhängig davon, wo sie sich befinden, wenn eine Rewrite-Direktive mit der Anforderungs-URL übereinstimmt, und stellt den Inhalt dem Benutzer bereit.

Lage /
umschreiben ^/browser/(.*)$ /Chrom/$1 Pause;

Standort /chrom
umschreiben ^/chrom/(.*)$ /$1 Pause;
try_files $uri $uri/ =404;

Fazit

URL-Rewriting ist ein Prozess zum Umschreiben von URLs innerhalb eines Webservers. Nginx bietet mehrere Direktiven wie Return, Rewrite, Map-Direktiven, um dies zu ermöglichen. Dieser Leitfaden zeigt, was Rückgabe- und Umschreibanweisungen sind und wie sie verwendet werden, um URLs mit Leichtigkeit umzuschreiben. Wie in den Beispielen gezeigt, ist die Return-Direktive geeignet, dem Browser zu signalisieren, und die Suchmaschine crawlt den Verbleib der Seite, während die Rewrite-Direktive nützlich ist, um den URL-Rewriting-Prozess abzustrahieren, ohne dass der Browser weiß, was hinter den Kulissen vor sich geht. Dies ist sehr nützlich, wenn Sie Inhalte über ein CDN, einen zwischengespeicherten Server oder von einem anderen Ort im Netzwerk aus bereitstellen. Die Benutzer wissen nie, woher die Ressource kommt, da der Browser nur die ihnen zugewiesene URL anzeigt.

Vulkan für Linux-Benutzer
Mit jeder neuen Grafikkartengeneration stoßen Spieleentwickler an die Grenzen der grafischen Wiedergabetreue und kommen dem Fotorealismus einen Schrit...
OpenTTD vs. Simutrans
Das Erstellen einer eigenen Transportsimulation kann Spaß machen, entspannend und äußerst verlockend sein. Deshalb sollten Sie so viele Spiele wie mög...
OpenTTD-Tutorial
OpenTTD ist eines der beliebtesten Wirtschaftssimulationsspiele auf dem Markt. In diesem Spiel musst du ein wunderbares Transportunternehmen aufbauen....