Tiefgreifendes Verständnis der Matching-Logik von Server und Standort in Nginx

Tiefgreifendes Verständnis der Matching-Logik von Server und Standort in Nginx

Server-Abgleichlogik

Wenn Nginx entscheidet, in welchem ​​Serverblock eine Anforderung ausgeführt werden soll, konzentriert es sich auf die Felder „Listen“ und „Servername“ im Serverblock.

Die Listen-Direktive

Das Listenfeld definiert die IP und den Port, auf die der Server antwortet. Wenn das Listenfeld nicht explizit konfiguriert ist, ist der Standardlistener 0.0.0.0:80 (Root) oder 0.0.0.0:8080 (Nicht-Root).

listen kann wie folgt konfiguriert werden:

  1. Eine Kombination aus einer IP und einem Port
  2. Eine einzelne IP, die standardmäßig auf Port 80 lauscht
  3. Ein einziger Port, der standardmäßig auf allen IP-Schnittstellen lauscht
  4. Ein Unix-Socket-Pfad

Letzteres wird normalerweise nur zum Übertragen von Anfragen zwischen verschiedenen Servern verwendet.

Für die Auswahl des zu verwendenden Servers gelten die folgenden Regeln:

  1. Nginx konvertiert zunächst alle „unvollständigen“ Listenanweisungen, beispielsweise werden solche ohne Listenfeld in „Listen 0.0.0.0:80“ konvertiert, „Listen 1.1.1.1“ wird in „Listen 1.1.1.1:80“ konvertiert usw.
  2. Nginx erstellt eine Liste von Serverblöcken, die der Anfrage basierend auf der angeforderten IP und dem angeforderten Port am besten entsprechen. Dabei werden Serverblöcke, die eine bestimmte IP angeben, bevorzugt und dann Serverblöcke wie „listen 0.0.0.0“ ausgewählt. In beiden Fällen muss der Port exakt übereinstimmen.
  3. Wenn nur eine beste Übereinstimmung vorhanden ist, wird der passende Serverblock zum Beantworten der Anforderung verwendet. Andernfalls wird die Servername-Direktive jedes Serverblocks ausgewertet.

Auch hier wird die Direktive „server_name“ nur ausgewertet, wenn die Direktive „listen“ keine optimale Übereinstimmung finden kann.

Nehmen wir beispielsweise an, dass die Domäne example.com auf 192.168.0.1 verweist und dass nginx auf 192.168.0.1 nur die folgenden beiden Serverblöcke hat:

# Serverblock 1Server {
  hören Sie 192.168.0.1;
  Servername other.com
  ...
}

# Serverblock 2Server {
  hören Sie 80;
  Servername example.com
  ...
}

Server_name-Direktive

Wenn die beste Übereinstimmung gemäß der Listen-Direktive nicht gefunden werden kann, wird die Server_Name-Direktive analysiert. Nginx überprüft den Header „Host“ in der Anfrage. Dieser Wert enthält den Domänennamen oder die IP-Adresse, die der Client tatsächlich anzufordern versucht. Nginx gleicht die Server_Name-Direktive anhand dieses Wertes ab. Die Übereinstimmungsregeln lauten wie folgt:

  1. Nginx versucht, einen Serverblock zu finden, der genau mit den Werten für Servername und Host übereinstimmt. Wenn mehrere genaue Übereinstimmungen gefunden werden, wird der erste übereinstimmende Serverblock verwendet.
  2. Wenn kein exakt passender Serverblock gefunden wird, versucht nginx, einen Serverblock zu finden, dessen Servername mit * beginnt. Wenn mehrere Serverblöcke gefunden werden, wird der am längsten passende Serverblock ausgewählt.
  3. Wenn kein Serverblock gefunden wird, der mit beginnt, wird nach einem Serverblock gesucht, der mit endet. Auch hier wird bei mehreren Übereinstimmungen die längste Übereinstimmung ausgewählt.
  4. Wenn kein Serverblock mit der Übereinstimmung * gefunden wird, wird nach einem Serverblock gesucht, der server_name mit einem regulären Ausdruck (beginnend mit ~) definiert. Wenn mehrere Übereinstimmungen gefunden werden, wird die erste Übereinstimmung verwendet.
  5. Wenn kein Serverblock gefunden wird, der dem regulären Ausdruck entspricht, wählt nginx einen Standardserverblock aus, der dem Listenfeld entspricht. Jede IP- und Portkombination kann mit genau einem Standard-Standardserverblock konfiguriert werden. Wenn es keinen gibt, wird der erste Server in der verfügbaren Liste ausgewählt (die Auswahl erfolgt derzeit zufällig und die Reihenfolge ist nicht festgelegt).

Hier ist ein Beispiel:

(1) Genaue Übereinstimmung mit dem Servernamen, zum Beispiel:

Server {
   hören Sie 80;
   Servername www.domain.com;
   ...
}

(2) Eine Zeichenfolge, die mit dem Platzhalterzeichen * beginnt:

Server {
   hören Sie 80;
   Servername *.Domäne.com;
   ...
}

(3) Eine Zeichenfolge, die mit dem Platzhalterzeichen * endet:

Server {
   hören Sie 80;
   Servername www.*;
   ...
}

(4) Passende reguläre Ausdrücke:

Server {
   hören Sie 80;
   Servername ~^(?.+)\.Domäne\.com$;
   ...
}

(5) Wenn keine der oben genannten Angaben übereinstimmt, wird der Standardserver verwendet. Wenn kein Standardserver angegeben ist, wird der erste verfügbare Server ausgewählt. Wir können angeben, dass ein Fehler an den Client zurückgegeben wird, wenn kein übereinstimmender Hostwert vorhanden ist. Dies kann verwendet werden, um zu verhindern, dass andere Junk-Verkehr auf Ihre Website umleiten.

Server {
  hören Sie 80 Standardserver;
  Servername _; Rückgabewert 444;
}

Lassen Sie nginx die Verbindung zum Browser trennen, indem Sie 444 zurückgeben, einen nicht standardmäßigen Fehlercode von nginx

Standortabgleichslogik

Standortsyntaxanalyse

Standort optionaler Modifikator Standortübereinstimmung {
  ...
}

Die verfügbaren Modifikatoren sind wie folgt

Entscheidungsregeln

1. Nginx sucht zunächst nach präfixbasierten Standortübereinstimmungen (d. h. Übereinstimmungen, die keine regulären Ausdrücke enthalten).

2. Wenn ein Standortblock mit dem Modifikator „=“ vollständig mit der angeforderten URL übereinstimmt, wird der Standort sofort verwendet, um auf die Anforderung zu antworten.

3. Wenn keine Übereinstimmung im Standortblock mit dem Modifikator „=“ gefunden wird, wird das ungenaue Präfix weiter berechnet, das längste übereinstimmende Präfix wird gemäß der angegebenen URI gefunden und dann die folgende Verarbeitung ausgeführt:

(1) Wenn der längste übereinstimmende Ort den Modifikator ^~ hat, verwendet nginx diesen Ort sofort, um auf die Anfrage zu antworten

(2) Wenn der längste übereinstimmende Ort nicht den Modifikator ^~ hat, speichert nginx den Treffer vorübergehend und fährt dann mit dem nächsten Treffer fort.

4. Nachdem der längste passende Präfix-Standortblock ermittelt und gespeichert wurde, prüft nginx weiterhin den passenden Standort des regulären Ausdrucks (Groß-/Kleinschreibung beachten/nicht beachten). Wenn ein regulärer Ausdruck vorhanden ist, der die Anforderungen erfüllt, wird der erste reguläre Ausdrucksstandort, der mit der angeforderten URI übereinstimmt, ausgewählt, um auf die Anforderung zu antworten.

5. Wenn kein mit der angeforderten URI übereinstimmender regulärer Ausdrucksort gefunden wird, wird der zuvor gespeicherte längste Präfixort verwendet, um auf die Anforderung zu antworten.

Auffüllen

Sobald ein Standort zur Beantwortung einer Anfrage ausgewählt wurde, wird die Anfrage normalerweise an diesem Standort bearbeitet, unabhängig von anderen Standorten. Einige Anweisungen am Standort lösen jedoch eine neue Standortübereinstimmung aus, beispielsweise:

(1) Versuch_Dateien

(2) umschreiben

(3) Fehlerseite

Weitere Informationen zum Konfigurieren des Standardservers für https finden Sie unter Richtiges Einrichten eines „Standard“-Nginx-Servers für https.

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

<<:  Vue.js-Textfeld mit Dropdown-Komponente

>>:  Detailliertes Beispiel zum Erstellen und Löschen von Tabellen in MySQL

Artikel empfehlen

Einige Hinweise zur Installation eines Fastdfs-Images im Docker

1. Bereiten Sie die Docker-Umgebung vor 2. Suchen...

Tipps zum Importieren von CSV-, Excel- oder SQL-Dateien in MySQL

1. CSV-Datei importieren Verwenden Sie den folgen...

JavaScript zum Erzielen des JD.com-Blitzverkaufseffekts

In diesem Artikel wird der spezifische JavaScript...

JavaScript implementiert eine Box, die der Mausbewegung folgt

In diesem Artikel wird der spezifische JavaScript...

Installieren Sie CentOS 7 auf VMware14 – Grafik-Tutorial

Einführung in CentOS CentOS ist eine Linux-Distri...

Vue-Routing zum Implementieren der Login-Abfangung

Inhaltsverzeichnis 1. Übersicht 2. Routing Naviga...

Tutorial zur Verwendung des Hyperlink-Tags in HTML

Die verschiedenen HTML-Dokumente der Website sind...

Ubuntu installiert mehrere Versionen von CUDA und wechselt jederzeit

Ich werde nicht erklären, was CUDA ist, sondern d...

Details zum TypeScript-Mapping-Typ

Inhaltsverzeichnis 1. Zugeordnete Typen 2. Mappin...

So ändern Sie das Root-Passwort in einem Container mit Docker

1. Verwenden Sie den folgenden Befehl, um das SSH...

Von CSS 3D zur räumlichen Koordinatenachse mit Quellcode

Einmal haben wir über das Würfelspiel gesprochen....