Detaillierte Zusammenfassung der URI-Übereinstimmungsregeln der Nginx Location-Direktive

Detaillierte Zusammenfassung der URI-Übereinstimmungsregeln der Nginx Location-Direktive

1. Einleitung

Die Standortanweisung ist die Kernkonfiguration des http-Moduls. Sie empfängt von Benutzern gesendete Anfragen gemäß vordefinierten URL-Übereinstimmungsregeln. Gemäß den Übereinstimmungsergebnissen leitet sie die Anfragen an den Hintergrundserver weiter, lehnt illegale Anfragen direkt ab und gibt die Fehlerverarbeitung 403, 404, 500 usw. zurück.

2. Syntax des Standortbefehls

Standort [=|~|~*|^~|@] /uri/ { … } oder Standort @name { … }

3. URI-Übereinstimmungsmuster

Die Standortdirektive ist in zwei Übereinstimmungsmodi unterteilt:
1> Normale Zeichenfolgenübereinstimmung: Regeln, die am Anfang mit = beginnen oder kein führendes Zeichen (~) haben
2> Übereinstimmung mit regulären Ausdrücken: Beginnend mit ~ oder ~* bedeutet dies, dass es sich um eine Übereinstimmung mit regulären Ausdrücken handelt, ~* bedeutet, dass bei regulären Ausdrücken die Groß-/Kleinschreibung nicht beachtet wird

4. Regeln für den Standort-URI-Abgleich

Wenn nginx eine Anfrage empfängt, fängt es den URI-Teil der Anfrage ab und sucht nach URI-übereinstimmenden Mustern, die in allen Standortanweisungen definiert sind. Im Servermodul können Sie mehrere Standortanweisungen definieren, um verschiedene URL-Anfragen und URI-Übereinstimmungsmuster für verschiedene Standortkonfigurationen abzugleichen. Das allgemeine Übereinstimmungsprinzip lautet: Zuerst das allgemeine Zeichenfolgenmuster abgleichen, dann das reguläre Muster. Erkennen Sie nur den URI-Teil, die Anfrage lautet beispielsweise: /test/abc/user.do?name=xxxx

Wenn eine Anfrage eingeht, läuft der Prozess zur Zuordnung dieser Anfrage durch Nginx wie folgt ab:

1> Prüfen Sie zunächst, ob eine exakte Übereinstimmung vorliegt, die mit = beginnt, beispielsweise: location = /test/abc/user.do { … }

2> Suche erneut nach einer normalen Übereinstimmung, basierend auf dem Prinzip des größten Präfixes. Wenn die folgenden zwei Standorte vorhanden sind, wird der letztere abgeglichen
* Standort /test/ { … }
* Standort /test/abc { … }

3> Nach dem Abgleichen eines gemeinsamen Musters endet die Suche nicht, sondern das aktuelle Übereinstimmungsergebnis wird vorübergehend gespeichert und die Suche nach dem regulären Übereinstimmungsmuster wird fortgesetzt

4> Nachdem alle regulären Übereinstimmungsmuster das erste übereinstimmende Element am Standort gefunden haben, wird dieses Element als endgültiges Übereinstimmungsergebnis verwendet. Daher werden die Übereinstimmungsregeln für reguläre übereinstimmende Elemente von der Reihenfolge der Definition beeinflusst, für gewöhnliche Übereinstimmungsmuster jedoch nicht.

5> Wenn keine reguläre Übereinstimmung gefunden wird, wird das zwischengespeicherte Ergebnis in Schritt 3 als endgültiges Übereinstimmungsergebnis verwendet
6> Wenn keine Übereinstimmung gefunden wird, geben Sie 404 zurück

5. Unterschiede zwischen exakter Übereinstimmung und Fuzzy-Übereinstimmung
Der Unterschied zwischen location =/ { … } und location / { … } ist:
* Das erste ist eine exakte Übereinstimmung, die nur auf /-Anfragen reagiert. Alle Anfragen wie /xxx oder /xxx/xxxx werden nicht als Präfix übereinstimmen.
* Letzteres bedeutet, dass jede Anfrage mit dem Präfix / abgeglichen wird. Zum Beispiel: /abc , /test/abc , /test/abc/aaaa

6. Regelmäßiges und unregelmäßiges Matching

1> location ~ /test/.+.jsp$ { … }: Normale Übereinstimmung, unterstützt die Standardsyntax für reguläre Ausdrücke.
2> location ^~ / { … }: ^~ bedeutet, dass die reguläre Übereinstimmung deaktiviert wird. Wenn dieses allgemeine Übereinstimmungsmuster gefunden wird, wird die Suche nach regulären Übereinstimmungsmustern nicht mehr fortgesetzt.

...
http {
  ...
  Server {
    hören Sie 80;
    Servername localhost;

    Standort / {
      Stamm-HTML;
      Index Index.html Index.htm;
      # alles ablehnen; Anfrage ablehnen und 403 zurückgeben
      # alles zulassen; Anfrage zulassen}

    Standort /abc {
      alles leugnen;
    }

    Standort ~ /.+\.jsp$ {
      Proxy-Passwort http://Standort:9090;
    }

    # Alle JSP-Dateien im Pfad /test abgleichen ~ /test/.+\.jsp$ {
      Proxy-Passwort http://localhost:8080;
    }

    # Definieren Sie verschiedene Fehlerseiten error_page 404 /404.html

    Fehlerseite 500 502 503 504 /50x.html;
    Standort = /50x.html {
      Stamm-HTML;
    }

    # @Ähnlich der Variablendefinition# error_page 403 http://blog.csdn.net; #Diese Definition ist nicht zulässig und es ist erforderlich, @ zu verwenden, um temporäre Variablen zu definieren, um error_page 403 zu implementieren @page403;
    Standort @Seite403 {
      Proxy_Pass http://blog.csdn.net;
    } 
  }
}

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)
  • Beispiel einer Nginx-Standortübereinstimmungsregel
  • 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

<<:  MySQL 5.7.20 Green Edition Installation Detailliertes grafisches Tutorial

>>:  Vue implementiert die richtige Slide-Out-Layer-Animation

Artikel empfehlen

Asynchroner Lebenszyklus von AsyncHooks in Node8

Async Hooks ist eine neue Funktion von Node8. Sie...

Sonderzeichen in HTML anzeigen (mit Sonderzeichen-Korrespondenztabelle)

Reproduktion des Problems Beim Bearbeiten mit HTM...

So verwenden Sie MySQL „group by“ und „order by“ gemeinsam

Angenommen, es gibt eine Tabelle: Belohnung (Belo...

Eine kurze Erläuterung der Rolle des Parameters docker --privileged=true

Mit etwa Version 0.6 wurde Privileged in Docker e...

Detaillierte Diskussion der InnoDB-Sperren (Record-, Gap-, Next-Key-Sperre)

Die Datensatzsperre sperrt einen einzelnen Indexd...

SQL-Implementierung von LeetCode (178. Punkterangliste)

[LeetCode] 178.Ranglistenergebnisse Schreiben Sie...

Detaillierte Erklärung des JS-Speicherplatzes

Inhaltsverzeichnis Überblick 1. Stapeln und Aufhä...

Lösungen für MySql-Abstürze und Dienststartfehler

Ich habe so lange mit PHP zu tun gehabt, aber die...

So verwenden Sie den Linux-Befehl seq

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

Einführung in die allgemeine API-Verwendung von Vue3

Inhaltsverzeichnis Veränderungen im Lebenszyklus ...

Beispielcode eines CSS-responsiven Layoutsystems

Responsive Layoutsysteme sind in den heute gängig...