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
= 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 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:
|
<<: 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
Vorwort Kürzlich stieß ich auf eine Anforderung, ...
In diesem Artikel finden Sie den spezifischen Cod...
Animation Definieren Sie eine Animation: /*Legen ...
Inhaltsverzeichnis 1. Installieren und erstellen ...
1. Befehlseinführung Mit dem Befehl seq (Sequence...
Das Hauptsymptom des Konflikts besteht darin, dass...
mysql gibt den Booleschen Typ zurück Im ersten Fa...
Dieser Artikel zeichnet das Installations-Grafik-...
Als ich heute CentOS6.2 installierte, kam ich nic...
Um es zusammenzufassen: „Nur lesen“ ist nur für Ei...
Wenn wir den Tabellennamen ändern oder die Tabell...
Inhaltsverzeichnis 1. Was ist Promise? 2. Warum g...
1. Paradigma Der englische Name des Paradigmas la...
Überblick: Das Dateisystemmodul ist ein einfacher...
Die MySQL-Versionsnummer ist 5.7.28. Tabelle A ha...