Erläuterung der Regeln zum Standortabgleich für die Nginx-Konfiguration (Beispiel)

Erläuterung der Regeln zum Standortabgleich für die Nginx-Konfiguration (Beispiel)

Der Umfang der Konfigurationsanweisungen von nginx kann in drei Typen unterteilt werden: Haupt-, Server- und Standort-Konfiguration. Tatsächlich sind diese drei nicht in einer Reihenfolge enthalten, sondern unabhängig voneinander. Beispielsweise kann eine Anweisung mit ausschließlichem Umfang auf Hauptebene nicht in einen Server oder Standort geschrieben werden. Eine bestimmte Anweisung eines Moduls kann gleichzeitig die Umfangsebenen Haupt-, Server- und Standort-Konfiguration haben. Darüber hinaus verfügt jedes Modul über drei Konfigurationsebenen: Haupt-, SRV- und loc-Konfiguration. Die Hauptkonfiguration eines Moduls wird von allen Servern und Standorten gemeinsam genutzt, und die SRV-Konfiguration wird von allen Standorten gemeinsam genutzt. Jeder Standort verfügt nur über seine eigene unabhängige loc-Konfiguration. Aus diesem Grund müssen die SRV- und loc-Konfigurationen eines Moduls zusammengeführt werden, während die Hauptkonfiguration nicht zusammengeführt werden muss. Dies mag etwas verwirrend erscheinen, aber es ist nicht schwierig, die Konfigurationsbeziehung von nginx zu verstehen, indem man zwischen Main, Server und Standort als Bereichsebene und Subjekt unterscheidet, was dem Unterschied zwischen einem Adjektiv und einem Namen ähnelt.

Wenn eine Anforderungs-URL eingeht, wird sie im Allgemeinen von nginx an einen bestimmten Speicherort zur Verarbeitung weitergeleitet. Dieser Analysevorgang kann tatsächlich in zwei Typen unterteilt werden: Zeichenfolgenübereinstimmung und reguläre Ausdrucksübereinstimmung entsprechend der Standortkonfiguration. Die einfachste Möglichkeit, Standorte zu organisieren, besteht darin, sie direkt als verknüpfte Liste zu speichern. Beim Parsen der URL können Sie den entsprechenden Standort finden, indem Sie sie einzeln durchlaufen. Dies ist jedoch zu ineffizient und für Hochleistungsserver wie nginx völlig unerwünscht. nginx organisiert die Standorte, die mit Zeichenfolgen übereinstimmen, in einem dreigliedrigen Zeichenfolgensortierbaum, und die Ausgewogenheit des Baums wird bei seiner Erstellung ebenfalls berücksichtigt. Die Implementierung des Quellcodes werde ich später im Artikel ausführlich vorstellen.

Lassen Sie mich zunächst kurz die Typen und Zuordnungsregeln von Standorten vorstellen und dabei das Beispiel des Nginx-Wikis (http://wiki.nginx.org/HttpCoreModule#location) verwenden:

Amtliche Dokumentation zur Standortpriorität

  • Anweisungen mit dem Präfix =, die genau der Abfrage entsprechen. Wenn sie gefunden werden, wird die Suche beendet.
  • Alle übrigen Anweisungen mit herkömmlichen Zeichenfolgen, längste Übereinstimmung zuerst. Wenn diese Übereinstimmung das Präfix ^~ verwendet, wird die Suche beendet.
  • Reguläre Ausdrücke, in der Reihenfolge ihrer Definition in der Konfigurationsdatei.
  • Wenn Nr. 3 eine Übereinstimmung ergab, wird dieses Ergebnis verwendet. Andernfalls wird die Übereinstimmung aus Nr. 2 verwendet.

= Präfix stimmt genau mit dieser Abfrage überein. Wenn Sie etwas gefunden haben, beenden Sie die Suche.

Von allen verbleibenden regulären Zeichenfolgen die längste Übereinstimmung. Wenn dieser Übereinstimmung das Zeichen ^~ vorangestellt ist, wird die Suche beendet.

Reguläre Ausdrücke in der in der Konfigurationsdatei definierten Reihenfolge.

Wenn Regel 3 eine Übereinstimmung ergibt, wird das Ergebnis verwendet. Ansonsten gelten die gleichen Regeln wie ab Regel 2.

Zum Beispiel

Standort = / { 
 # Stimmt nur mit "/" überein. 
 [ Konfiguration A ]  
} 
Standort / { 
 # Stimmt mit jeder Anfrage überein, da alle Anfragen mit "/" beginnen. # Aber Übereinstimmungen mit längeren Zeichen oder regulären Ausdrücken haben Vorrang [Konfiguration B]  
} 
Standort ^~ /images/ { 
 # Alle Anfragen abgleichen, die mit /images/ beginnen, und keine Übereinstimmungen mit anderen Standorten mehr 
 [ Konfiguration C ]  
} 
Standort ~* \.(gif|jpg|jpeg)$ { 
 # Stimmt mit Anfragen überein, die mit „gif“, „jpg“ oder „jpeg“ enden.  
 # Aber alle Anfragen an das Verzeichnis /images/ werden von [Konfiguration C] behandelt.   
 [ Konfiguration D ]  
}

Sie können sehen, dass es im obigen Beispiel 5 verschiedene Arten von Standorten gibt. Der 4. Standort mit einem „~“-Präfix ist der Standort, der regelmäßig abgeglichen werden muss. Nginx hat beim Parsen von URLs unterschiedliche Prioritätsregeln für diese 5 verschiedenen Standorttypen. Die allgemeinen Regeln lauten wie folgt:

1. Wenn die Zeichenfolge genau mit einem Speicherort übereinstimmt, dem ein "=" vorangestellt ist, beenden Sie den Vorgang und verwenden Sie die Konfiguration dieses Speicherorts.

2. Die Zeichenfolge stimmt mit den verbleibenden nicht regulären und nicht speziellen Standorten überein. Wenn ein Standort mit dem Präfix "^~" übereinstimmt, stoppen Sie.

3. Normaler Abgleich. Die Abgleichreihenfolge ist die Reihenfolge, in der die Standorte in der Konfigurationsdatei erscheinen. Wenn ein regulärer Standort übereinstimmt, beenden Sie den Vorgang und verwenden Sie die Konfiguration dieses Standorts. Andernfalls verwenden Sie die Standortkonfiguration mit der maximalen Zeichenfolgenübereinstimmung, die Sie in Schritt 2 erhalten haben.

Beispielsweise für die folgende Anfrage:

1, / -> Genaue Übereinstimmung mit dem ersten Standort, Übereinstimmung mit Haltestellen, Verwendung der Konfiguration A

2. /some/other/url -> Zuerst wird der Präfixteil der Zeichenfolge mit dem zweiten Standort abgeglichen, und dann wird ein regulärer Ausdrucksabgleich durchgeführt. Offensichtlich gibt es keine Übereinstimmung, daher wird die Konfiguration B des zweiten Standorts verwendet.

3. /images/1.jpg -> Zuerst stimmt der Präfixteil der Zeichenfolge mit dem zweiten Standort überein, aber dann stimmt auch der dritte Standort mit dem Präfix überein. Zu diesem Zeitpunkt ist dies die maximale Zeichenfolgenübereinstimmung für diese URL in der Konfigurationsdatei, und der Standort hat ein Präfix „^~“, sodass kein regulärer Ausdrucksabgleich durchgeführt wird und schließlich Konfiguration C verwendet wird.

4. /some/other/path/to/1.jpg -> Zuerst wird der Präfixteil derselben Zeichenfolge mit dem zweiten Standort abgeglichen, und dann wird ein regulärer Ausdruck abgeglichen. Wenn der reguläre Ausdruck erfolgreich abgeglichen wird, wird Konfiguration D verwendet.

Beispiel für eine Anforderungs-URI:

/ -> Entspricht Konfiguration A
/documents/document.html -> entspricht Konfiguration B
/images/1.gif -> entspricht Konfiguration C
/documents/1.jpg -> entspricht Konfiguration D
@location Beispiel Fehlerseite 404 = @fetch;

Standort @fetch(
Proxy-Passwort http://abrufen;
)

Befehl zur Standortübereinstimmung

  • ~ #Die Wellenlinie zeigt eine reguläre Übereinstimmung an, Groß- und Kleinschreibung wird beachtet
  • ~* # zeigt an, dass ein regulärer Abgleich durchgeführt werden soll, ohne Berücksichtigung der Groß- und Kleinschreibung
  • ^~ #^~ zeigt eine normale Zeichenübereinstimmung an. Wenn diese Option übereinstimmt, wird nur diese Option abgeglichen und keine anderen Optionen. Dies wird im Allgemeinen zum Abgleichen von Verzeichnissen verwendet.
  • = # Führen Sie eine exakte Übereinstimmung gemeinsamer Zeichen durch
  • @ #"@" definiert einen benannten Ort, der für internes Targeting verwendet wird, wie etwa error_page, try_files

Die Priorität der Standortübereinstimmung (unabhängig von der Reihenfolge der Standorte in der Konfigurationsdatei)

= Genaue Übereinstimmungen werden zuerst verarbeitet. Wenn eine exakte Übereinstimmung gefunden wird, beendet nginx die Suche nach weiteren Übereinstimmungen.

Der Übereinstimmung mit gewöhnlichen Zeichen, regulären Ausdrücken und langen Blockregeln wird gegenüber der Abfrageübereinstimmung Vorrang eingeräumt. Dies bedeutet, dass bei einer Übereinstimmung des Elements geprüft werden muss, ob eine Übereinstimmung mit regulären Ausdrücken und eine längere Übereinstimmung vorliegt.

^~ entspricht nur dieser Regel und nginx beendet die Suche nach anderen Übereinstimmungen. Andernfalls verarbeitet nginx weiterhin andere Standortanweisungen.

Schließlich werden die Anweisungen mit „~“ und „~*“ abgeglichen. Wenn eine entsprechende Übereinstimmung gefunden wird, beendet nginx die Suche nach weiteren Übereinstimmungen. Wenn kein regulärer Ausdruck vorhanden ist oder kein regulärer Ausdruck übereinstimmt, wird die wörtliche Übereinstimmungsanweisung mit dem höchsten Übereinstimmungsgrad verwendet.

Dies ist das Ende dieses Artikels über das Beispiel von Nginx-Konfigurationsstandort-Matching-Regeln. Weitere relevante Inhalte zu Nginx-Konfigurationsstandort-Matching-Regeln 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:
  • Verstehen Sie die Implementierung des Nginx-Standortabgleichs in einem Artikel
  • Eine kurze Analyse der Übereinstimmungspriorität des Nginx-Konfigurationsspeicherorts
  • Detaillierte Erläuterung der Nginx-Standortkonfiguration (Standortübereinstimmungsreihenfolge)
  • Detaillierte Erklärung der Standort- und Umschreibenutzung in nginx
  • Tiefgreifendes Verständnis der Matching-Logik von Server und Standort in Nginx

<<:  Detaillierte Erläuterung der zugrunde liegenden Kapselung der Java-Verbindung zu MySQL

>>:  Verwenden Sie auto.js, um die automatische tägliche Check-in-Funktion zu realisieren

Artikel empfehlen

WeChat-Applet + ECharts zur Realisierung eines dynamischen Aktualisierungsprozesses

Vorwort Kürzlich stieß ich auf eine Anforderung, ...

Verwenden von jQuery zum Implementieren des Karusselleffekts

In diesem Artikel finden Sie den spezifischen Cod...

Gängige Stile von CSS-Animationseffekten

Animation Definieren Sie eine Animation: /*Legen ...

Detaillierte Erläuterung der Anwendungsbeispiele für Vue-Router 4

Inhaltsverzeichnis 1. Installieren und erstellen ...

So verwenden Sie den Linux-Befehl seq

1. Befehlseinführung Mit dem Befehl seq (Sequence...

Der Unterschied zwischen schreibgeschützt und deaktiviert

Um es zusammenzufassen: „Nur lesen“ ist nur für Ei...

Zusammenfassung der Wissenspunkte zum MySQL ALTER-Befehl

Wenn wir den Tabellennamen ändern oder die Tabell...

Ein tiefer Einblick in JavaScript-Promises

Inhaltsverzeichnis 1. Was ist Promise? 2. Warum g...

Detaillierte Erklärung der Verwendung des MySQL-Paradigmas

1. Paradigma Der englische Name des Paradigmas la...

Detaillierte Erklärung der Methoden des fs-Moduls und des Path-Moduls in Node.js

Überblick: Das Dateisystemmodul ist ein einfacher...

Optimierte Aufzeichnung der Verwendung von IN-Datenvolumen in Mysql

Die MySQL-Versionsnummer ist 5.7.28. Tabelle A ha...