Beispiel einer Nginx-Standortübereinstimmungsregel

Beispiel einer Nginx-Standortübereinstimmungsregel

1. Grammatik

Standort [=|~|~*|^~|@] /uri/ {
 ...
}

2. Beschreibung

Aus der obigen Syntax können wir erkennen, dass der Standort in drei Teile unterteilt werden kann. Lassen Sie uns diese nacheinander untersuchen.

1) [=|~|~*|^~|@]

  • = : bedeutet genaue Übereinstimmung mit der folgenden URL
  • ~: zeigt reguläre Übereinstimmung an, aber Groß-/Kleinschreibung beachtend
  • ~*: Übereinstimmung mit regulären Ausdrücken, ohne Berücksichtigung der Groß-/Kleinschreibung
  • ^~: zeigt eine normale Zeichenübereinstimmung an. Wenn diese Option übereinstimmt, wird nur diese Option abgeglichen und keine anderen Optionen. Wird im Allgemeinen zum Abgleichen von Verzeichnissen verwendet.
  • @ : "@" definiert einen benannten Ort, der für internes Targeting verwendet wird, wie etwa error_page

Oben sind mehrere unterschiedliche Symbole definiert, die unterschiedliche Übereinstimmungsregeln darstellen. Wie ist also die Reihenfolge?

  1. = Präfix stimmt genau mit dieser Abfrage überein. Wenn gefunden, beenden Sie die Suche.
  2. Von allen verbleibenden regulären Zeichenfolgen die längste Übereinstimmung. Wenn der Übereinstimmung das Zeichen ^~ vorangestellt ist, wird die Suche beendet.
  3. Reguläre Ausdrücke in der in der Konfigurationsdatei definierten Reihenfolge;
  4. Wenn Regel 3 eine Übereinstimmung ergibt, wird das Ergebnis verwendet. Andernfalls wird das Ergebnis der Regel 2 verwendet.

Testbeispiel 1:

Standort = /Welt {
 Rückgabe 600;
}

Standort = /hallo {
 Rückgabe 600;
}

Standort ~ /hallo {
 Rückgabe 602;
}

Standort ^~ /hallo {
 Rückgabe 601;
}

- Die Anfrage „localhost/world“ gibt 600 zurück
- Anfrage localhost/world2 localhost/test/world gibt andere zurück - Anfrage localhost/hello gibt 600 zurück
- Die Anfrage localhost/hello/123 gibt 601 zurück
- Die Anfrage „localhost/hellow“ gibt 601 zurück.
- Die Anfrage „localhost/hellowo“ gibt 601 zurück.
- Die Anfrage localhost/test/hellowo gibt 602 zurück
- Die Anfrage „localhost/test/hello“ gibt andere

Daher können wir wissen:

  • = ist eine exakte und vollständige Übereinstimmung und hat die höchste Priorität;
  • Wenn beim Abgleichen eines regulären Ausdrucks sowohl ~ als auch ^~ gleichzeitig der Regel entsprechen, hat ^~ Vorrang.
  • ^~ Diese Regel stimmt nicht mit dem Pfad nach der Anforderungs-URL überein, wie z. B. /test/hello oben.
  • ^~ unterstützt keine regulären Ausdrücke. Verglichen mit = hat es einen größeren Bereich. hellowo kann mit ^~ abgeglichen werden, aber nicht mit =.
  • ~ kann abgeglichen werden, solange es im Pfad enthalten ist, wie z. B. /test/hellowo oben, das 602 zurückgibt.

Versuchsbeispiel 2:

Standort ~ /hallo {
 Rückgabe 602;
}

Standort ~ /hallowelt {
 Rückgabe 601;
}

- Die Anfrage localhost/world/helloworld gibt 602 zurück
- Die Anfrage „localhost/helloworld“ gibt 602 zurück.

Passen Sie die Reihenfolge oben an

Standort ~ /hallowelt {
 Rückgabe 601;
}

Standort ~ /hallo {
 Rückgabe 602;
}

- Die Anfrage „localhost/helloworld“ gibt 601 zurück.
- Die Anfrage „localhost/world/helloworld“ gibt 601 zurück.
- Die Anfrage „localhost/helloWorld“ gibt 602 zurück.

Wenn also der reguläre Ausdruck übereinstimmt

  • Das erste Streichholz ist das, das vorne platziert wird
  • Beachten Sie: Wenn Sie nicht zwischen Groß- und Kleinschreibung unterscheiden, verwenden Sie ~*
  • Versuchen Sie, exakte Übereinstimmungen an den Anfang zu stellen.

Versuchsbeispiel 3:

Standort ^~ /hallo/ {
 Rückgabe 601;
}

Standort /hallo/welt {
 Rückgabe 602;
}

In diesem Szenario gibt es eine Routing-Regel, die nicht übereinstimmt. Wie sieht also der eigentliche Test aus?

- http://localhost/hello/wor gibt 601 zurück
- http://localhost/hello/world gibt 602 zurück
- http://localhost/hello/world23 gibt 602 zurück
- http://localhost/hello/world/123 gibt 602 zurück

Aus dem obigen Beispiel können wir sehen

  • Wenn keine Übereinstimmung vorliegt, hat die vollständige Übereinstimmung Vorrang ^~

2) [uri]

Hier muss vor allem der Pfad eingegeben werden, der abgeglichen werden muss. Entsprechend den vorherigen Symbolen können Sie den genauen Pfad oder einen regulären Ausdruck eingeben. Im Folgenden wird hauptsächlich der reguläre Ausdruck erläutert.

  • . : passt zu jedem Zeichen außer Newline
  • ? : 0 oder 1 Mal wiederholen
  • + : 1 oder mehr Mal wiederholen
  • *: 0 oder mehr Mal wiederholen
  • \d: entspricht einer Zahl
  • ^ : entspricht dem Anfang einer Zeichenfolge
  • $: Einführung in passende Zeichenfolgen
  • {n} : n-mal wiederholen
  • {n,} : n-mal oder öfter wiederholen
  • [c]: Passt auf ein einzelnes Zeichen c
  • [az]: passt zu jedem Kleinbuchstaben az
  • Auf den zwischen den Klammern () stehenden Inhalt kann später durch $1 verwiesen werden, und $2 stellt den Inhalt im zweiten () dar. Was bei regulären Ausdrücken verwirrend ist, ist das \-Escape-Sonderzeichen.

Routing und Weiterleitung

Der Anforderungspfadabgleich ist nur der erste Schritt. Wie kann die Anforderung nach Abschluss des Abgleichs an andere Webdienste weitergeleitet werden?

1. Reverse-Proxy

Eine gängige Verwendungshaltung besteht darin, Nginx zum Proxy-Versenden von Anfragen und deren Weiterleitung an andere interne Webdienste zu verwenden.

Hauptsächlich erreicht durch prixy_pass

Standort ^~ /webs {
 Proxy-Passwort http://127.0.0.1:8080/webs;
}

Die Bedeutung der obigen Regel besteht darin, alle Anfragen, die mit „Webs“ beginnen, an den Webdienst auf Port 8080 weiterzuleiten.

Das Obige wird direkt an eine IP-Adresse weitergeleitet. Wenn mehrere Maschinen Dienste bereitstellen, können Sie es wie folgt konfigurieren

## Setzen Sie Folgendes in die Klammern von http als erste Upstream-Schicht test.online {
 Server 120.11.11.11:8080 Gewicht=1;
 Server 120.11.11.12:8080 Gewicht=1;
}

Standort ^~ /webs {
 Proxy-Pass http://test.online;
 Proxy_Redirect-Standard;
}

2. Befehl neu schreiben

Die Umschreibfunktion verwendet die von nginx bereitgestellten globalen Variablen oder die von Ihnen selbst festgelegten Variablen, kombiniert mit regulären Ausdrücken und Flags, um das Umschreiben und Umleiten von URLs zu erreichen.

rewrite kann nur in server{}, location{}, if{} platziert werden und kann nur auf die Zeichenfolge nach dem Domänennamen angewendet werden, mit Ausnahme der übergebenen Parameter, wie z. B.

http://jb51.net/a/we/index.php?id=1&u=str

Schreiben Sie nur /a/we/index.php neu.

Syntax: Regex-Ersetzung neu schreiben [Flag];

Beispiel:

Standort ^~ /hexo {
 Stammverzeichnis '/Benutzer/yihui/GitHub/';
}

Standort ~ /hallo {
 schreibe ^(/hallo).*$ /hexo/public/index.html zuletzt um;
 Rückgabe 603;
}

Leiten Sie alle Dateien, die mit „hello“ beginnen, an /hexo/public/index.html weiter.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Nginx-Standortabgleichsregeln
  • Beispiel für die reguläre Umschreibmethode für Nginx Rewrite (Matching)
  • Detaillierte Zusammenfassung der URI-Übereinstimmungsregeln der Nginx Location-Direktive
  • So erfüllen Sie mit Nginx mehrere Bedingungen
  • Implementierung von Nginx-Weiterleitungsübereinstimmungsregeln
  • Eine kurze Zusammenfassung der Nginx-Übereinstimmungsregeln (empfohlen)
  • Detaillierte Erläuterung der verschiedenen Matching-Methoden von Nginx

<<:  Detaillierte Diskussion zum Thema mysqldump-Datenexport

>>:  Perfekte Lösung für das Problem, dass MySQL sofort nach dem Start heruntergefahren wird (verursacht durch eine Beschädigung der ibdata1-Datei)

Artikel empfehlen

Beispiel für die Anpassung von rem an mobile Geräte

Vorwort Überprüfung und Zusammenfassung von REM-A...

Detaillierte Erläuterung der Angular-Datenbindung und ihrer Implementierung

Inhaltsverzeichnis Vorwort Was ist Datenbindung? ...

Zusammenfassung der drei Phasen der Entwicklung eines visuellen Designers

Viele Leute haben dieses Buch gelesen: „Entwickel...

Wie Sie die redundanten Felder der Datenbank sinnvoll nutzen

Privot ist die Zwischentabelle von Viele-zu-viele...

Einführung in den Befehl „Linux-Typversion-Speicherfestplattenabfrage“

1. Lassen Sie uns zunächst eine allgemeine Einfüh...

Facebooks nahezu perfekte Neugestaltung aller Internetdienste

<br />Originalquelle: http://www.a-xuan.cn/?...

Lösung für die nicht wirksame Änderung des El-Popover-Stils von ElementUI

Bei der Verwendung von Element-UI gibt es eine hä...

Tutorial zur Installation des GreasyFork-JS-Skripts auf dem Mobiltelefon

Inhaltsverzeichnis Vorwort 1. Iceraven-Browser (F...

50 superpraktische Tools für Webdesigner

Webdesigner zu sein ist nicht einfach. Sie müssen...

Lösung für das Verschwinden des MySql-Dienstes aus unbekannten Gründen

Lösung für das Verschwinden des MySql-Dienstes au...

Detaillierte Erklärung des Responsive-Prinzips von Vue3

Inhaltsverzeichnis Überprüfung der responsiven Pr...