Verstehen Sie die Implementierung des Nginx-Standortabgleichs in einem Artikel

Verstehen Sie die Implementierung des Nginx-Standortabgleichs in einem Artikel

Da das Team Front-End und Back-End trennt, übernimmt das Front-End die Nginx- und Node-Ebenen. In der täglichen Arbeit haben wir viel mit Nginx zu tun. Unter ihnen ist der Standort der am häufigsten genutzte und am meisten veränderte Ort. Zuvor hatte ich nur eine vage Vorstellung von den Regeln zum Standortabgleich. Um zu verstehen, wie die Standortübereinstimmung erfolgt, habe ich einige Zeit damit verbracht, einige Informationen nachzuschlagen und sie in diesem Artikel zusammengefasst. Ich hoffe, dass dies für alle hilfreich sein kann.

Grammatikregeln

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

Die Syntax ist einfach: ein Standortschlüsselwort, gefolgt von optionalen Modifikatoren, gefolgt von den abzugleichenden Zeichen und der auszuführenden Aktion in geschweiften Klammern.

Modifikatoren

  • = zeigt eine genaue Übereinstimmung an. Nur wenn der angefragte URL-Pfad exakt mit der darauf folgenden Zeichenfolge übereinstimmt, wird ein Treffer erzielt.
  • ~ gibt an, dass die Regel mithilfe regulärer Ausdrücke definiert ist und zwischen Groß- und Kleinschreibung unterscheidet.
  • ~* gibt an, dass die Regel mit regulären Ausdrücken definiert ist und nicht zwischen Groß- und Kleinschreibung unterscheidet.
  • ^~ bedeutet, dass diese Regel übernommen wird und keine weitere Suche durchgeführt wird, wenn das diesem Symbol folgende Zeichen die beste Übereinstimmung darstellt.

Matching-Prozess

Serialisieren Sie die Anforderungs-URL. Dekodieren Sie beispielsweise Zeichen wie %xx, entfernen Sie mehrere aufeinanderfolgende / in der URL und analysieren Sie ., .. usw. in der URL. Dieser Schritt ist Voraussetzung für das Matching.

Es gibt zwei Möglichkeiten, den Standort auszudrücken: Eine besteht in der Verwendung von Präfixzeichen und die andere in der Verwendung von regulären Ausdrücken. Handelt es sich um einen regulären Ausdruck, wird ihm ein Modifikator „~“ oder „~*“ vorangestellt.

Der konkrete Abgleichvorgang läuft wie folgt ab:

Überprüfen Sie zunächst die durch die Präfixzeichen definierten Standorte, wählen Sie das am längsten passende Element aus und erfassen Sie es.

Wenn ein exakt übereinstimmender Standort gefunden wird, also ein Standort mit dem Modifikator „=“, wird die Suche beendet und seine Konfiguration wird verwendet.

Suchen Sie dann der Reihe nach mit regulären Ausdrücken nach den definierten Standorten. Wenn eine Übereinstimmung gefunden wird, beenden Sie die Suche und verwenden Sie die dadurch definierte Konfiguration.

Wenn keine passende reguläre Position vorhanden ist, wird die längste zuvor aufgezeichnete passende Präfixzeichenposition verwendet.

Basierend auf dem obigen Abgleichprozess können wir die folgenden zwei Erkenntnisse gewinnen:

  1. Dabei ist die Reihenfolge wichtig, in der die mit regulären Ausdrücken definierten Standorte in der Konfigurationsdatei vorkommen. Denn nachdem der erste passende reguläre Ausdruck gefunden wurde, wird die Suche beendet und die später definierten regulären Ausdrücke haben keine Chance mehr, erneut zuzutreffen.
  2. Die Verwendung exakter Übereinstimmungen kann die Suchvorgänge beschleunigen. Wenn Sie beispielsweise häufig / anfordern, können Sie = verwenden, um den Standort zu definieren.

Beispiel
Als nächstes verdeutlichen wir den Matching-Prozess anhand eines Beispiels.

Angenommen, wir haben die folgende Konfigurationsdatei:

Standort = / {
  [ Konfiguration A ]
}

Standort / {
  [ Konfiguration B ]
}

Standort /Benutzer/ {
  [ Konfiguration C ]
}

Standort ^~ /images/ {
  [ Konfiguration D ]
}

Standort ~* \.(gif|jpg|jpeg)$ {
  [ Konfiguration E ]
}

Anfrage/exakte Übereinstimmung A, keine weitere Suche.

Die Anfrage /index.html stimmt mit B überein. Suchen Sie zuerst nach übereinstimmenden Präfixzeichen, finden Sie die längste Übereinstimmung in Konfiguration B und suchen Sie dann der Reihe nach nach übereinstimmenden regulären Ausdrücken. Es wurde keine gefunden, daher wird die längste Übereinstimmung des vorherigen Tags verwendet, also Konfiguration B.

Die Anforderung von /user/index.html stimmt mit C überein. Suchen Sie zunächst nach der längsten Übereinstimmung C. Da dahinter kein passender regulärer Ausdruck steckt, wird die längste Übereinstimmung C verwendet.

Die Anforderung /user/1.jpg entspricht E. Suchen Sie zuerst nach den Präfixzeichen, um die längste Übereinstimmung C zu finden, und fahren Sie dann mit der normalen Suche fort, um die Übereinstimmung E zu finden. Verwenden Sie also E.

Die Anforderung /images/1.jpg stimmt mit D überein. Suchen Sie zuerst nach den Präfixzeichen und finden Sie die längste Übereinstimmung D. Die Besonderheit besteht jedoch darin, dass der Modifikator ^~ verwendet wird und die anschließende Suche nach Übereinstimmungen mit regulären Ausdrücken nicht mehr durchgeführt wird, sodass D verwendet wird. Wenn hier kein Modifikator vorangeht, ist die endgültige Übereinstimmung tatsächlich E. Sie können darüber nachdenken, warum.

Die Anfrage /documents/about.html entspricht B. Denn B bedeutet, dass jede URL, die mit / beginnt, übereinstimmt. In der obigen Konfiguration kann nur B erfüllt werden, sodass B übereinstimmt.

Verwendung des Standortnamens @

@ wird verwendet, um einen benannten Ort zu definieren. Wird hauptsächlich für die interne Umleitung verwendet und kann nicht zur Bearbeitung normaler Anfragen verwendet werden. Die Verwendung ist wie folgt:

Standort / {
  try_files $uri $uri/ @custom
}
Standort @custom {
  # ...etwas tun
}

Wenn Sie im obigen Beispiel versuchen, auf die URL zuzugreifen und die entsprechende Datei nicht finden können, werden Sie zu unserem benutzerdefinierten benannten Speicherort umgeleitet (hier ist „benutzerdefiniert“).

Beachten Sie, dass benannte Standorte nicht in anderen benannten Standorten verschachtelt werden können.

Ist der / am Ende der URL erforderlich?

Zum / am Ende der URL sind drei Punkte zu beachten. Der erste Punkt bezieht sich auf die Standortkonfiguration, die anderen beiden Punkte nicht.

Das Vorhandensein oder Fehlen des Zeichens „/“ im Standort hat keine Auswirkung. Das heißt, /user/ und /user sind dasselbe.

Wenn die URL-Struktur die Form https://domain.com/ hat, wird keine Weiterleitung ausgelöst, auch wenn am Ende ein / steht. Weil der Browser bei einer Anfrage standardmäßig / hinzufügt. Allerdings zeigen viele Browser / nicht in der Adressleiste an. Sie können Baidu besuchen, um dies zu überprüfen.

Wenn die URL-Struktur https://domain.com/some-dir/ ist. Das Fehlen des abschließenden / führt zu einer Umleitung. Denn laut Konvention stellt der / am Ende der URL ein Verzeichnis dar, nicht aber eine Datei. Beim Zugriff auf /some-dir/ sucht der Server daher automatisch nach der entsprechenden Standarddatei in diesem Verzeichnis. Wenn Sie auf /some-dir zugreifen, sucht der Server zuerst nach der Datei some-dir. Wenn er die Datei nicht finden kann, behandelt er some-dir als Verzeichnis und leitet zu /some-dir/ um, um die Standarddatei in diesem Verzeichnis zu finden. Sie können testen, ob Ihre Website so ist.

Zusammenfassen

Es gibt zwei Formen der Standortkonfiguration: Präfixzeichen und regulärer Ausdruck. Suchen Sie bei der Suche nach einer Übereinstimmung zuerst nach den Präfixzeichen, wählen Sie die längste Übereinstimmung aus und suchen Sie dann nach dem regulären Ausdruck. Die Priorität des regulären Ausdrucks ist höher als die des Präfixzeichens.

Reguläre Ausdrücke werden in der Reihenfolge durchsucht, in der sie in der Konfigurationsdatei vorkommen. Daher ist die Reihenfolge der regulären Ausdrücke sehr wichtig. Es wird empfohlen, die komplexeren Ausdrücke früher zu platzieren.

Die Verwendung von = für genaue Übereinstimmungen kann die Suchreihenfolge beschleunigen. Wenn der Stammdomänenname häufig besucht wird, wird die Verwendung von = empfohlen.

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:
  • 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
  • Erläuterung der Regeln zum Standortabgleich für die Nginx-Konfiguration (Beispiel)

<<:  Javascript implementiert die Webversion des Flipperspiels

>>:  Installieren von MySQL 8.0.12 basierend auf Windows

Artikel empfehlen

Linux entfernt node.js vollständig und installiert es über den Befehl yum neu

erster Schritt Einmaliges Löschen mit der integri...

Detaillierter Beispielcode einer MySQL-Batch-Einfügeschleife

Hintergrund Als ich vor einigen Tagen Paging in M...

MySQL Slow Query-Optimierung: Die Vorteile von Limit aus Theorie und Praxis

Oftmals erwarten wir, dass das Abfrageergebnis hö...

Tutorial zur Installation von Elasticsearch 7.6.2 in Docker

Docker installieren Sie müssen Docker installiere...

Beispielcode zur Realisierung des Ladeeffekts der B-Station mit CSS+SVG

Schwierigkeit Erstellung von zwei Masken für SVG-...

CSS3-Textanimationseffekte

Wirkung html <div Klasse="sp-container&qu...

TypeScript-Aufzählungstypen im Detail erklären

Inhaltsverzeichnis 1. Digitale Aufzählung 2. Zeic...

Eine vollständige Anleitung zum Löschen von Floats in CSS (Zusammenfassung)

1. Übergeordnetes Div definiert Pseudoklassen: af...

Analyse der Gründe, warum das MySQL-Indexsystem den B + -Baum verwendet

Inhaltsverzeichnis 1. Was ist ein Index? 2. Warum...

Beispiel für die Bereitstellung von MySQL 8.0 mit Docker

1. Informationen zur Installation von Docker find...

N Möglichkeiten, Elemente mit CSS zu zentrieren

Inhaltsverzeichnis Vorwort Zentrieren von Inline-...

Detaillierte Erläuterung der MySQL-Filterreplikationsideen

Inhaltsverzeichnis MySQL gefilterte Replikation I...