Detaillierte Analyse der Übereinstimmungsregeln bei der Verarbeitung von Anfragen durch Nginx

Detaillierte Analyse der Übereinstimmungsregeln bei der Verarbeitung von Anfragen durch Nginx

Wenn nginx eine Anfrage empfängt, gleicht es zunächst einen Server nach dem Servernamen ab und fährt dann mit der Zuordnung anhand des Speicherorts auf dem Server fort.

Servername abgleichen

In nginx bestimmt der Servername, welcher Server verwendet wird, wenn eine Anfrage eingeht. nginx verwendet das Host-Feld im Anfrageheader, um den Servernamen abzugleichen. Beim Definieren des Servernamens können Sie einen vollständigen Namen, einen Platzhalternamen oder einen regulären Ausdrucksnamen verwenden. Die Reihenfolge der Übereinstimmung ist wie folgt:

  • Genaue Übereinstimmung
  • Das Platzhalterzeichen vor der Zeichenfolge, also *.example.org
  • Nach Platzhalterübereinstimmung, z. B. Mail.*
  • Übereinstimmung mit regulären Ausdrücken

Wenn keine Übereinstimmung gefunden wird, wird der Standardserver für die Verarbeitung verwendet. Wenn er nicht definiert ist, wird der erste definierte verwendet. Verwenden Sie drei einfache Server als Beispiele, lassen Sie sie Port 80 abhören und setzen Sie den Servernamen jeweils auf *.org, *.net, *.com:

Server {
 hören Sie 80;
 Servername example.org www.example.org;
 Rückgabe 401;
}

Server {
 hören Sie 80;
 Servername Beispiel.net www.Beispiel.net;
 Rückgabe 402;
}

Server {
 hören Sie 80;
 Servername Beispiel.com www.Beispiel.com;
 Rückgabe 403;
}

In der obigen Konfiguration ist der Standardserver der erste. Jeder Zugriff auf einen nicht vorhandenen Server gibt 401 zurück. Sie können jedoch mit default_server manuell einen Standardhost festlegen. Der default_server wird im Listenfeld wie folgt festgelegt:

Server {
 hören Sie 80 Standardserver;
 Servername Beispiel.net www.Beispiel.net;
}

Wenn beim erneuten Abgleich keine Übereinstimmung gefunden wird, wird dieser Server verwendet.

Zugriff verweigert

Wenn Sie eine Anfrage ohne Host-Feld verbieten möchten, können Sie den folgenden Server definieren:

Server {
 hören Sie 80;
 Servername "";
 Rückgabe 444;
}

server_name wird als leere Zeichenfolge definiert. Wenn das Feld Host leer ist oder nicht existiert, wird dieser Server abgeglichen und ein 404-Statuscode zurückgegeben.

Der Status 444 von Nginx ist etwas Besonderes. Wenn 444 zurückgegeben wird, erhält der Client die vom Server zurückgegebenen Informationen nicht, so wie die Website nicht verbunden werden kann und der Browser direkt 502 anzeigt. Wenn jedoch ein Reverse-Proxy verwendet wird, wird weiterhin der normale Statuscode angezeigt.

Wenn Sie den Zugriff auf nicht vorhandene Hosts verbieten möchten, können Sie dies wie folgt definieren:

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

_ hat hier keine besondere Bedeutung, da ein Domänenname nicht in _ vorkommt und daher nicht mit einem echten Domänennamen identisch ist. Dasselbe gilt für andere ungültige Zeichen.

Sowohl IP als auch Servername müssen übereinstimmen

Sehen wir uns nun an, wie die Mischung aus unterschiedlichen Abhör-IPs und unterschiedlichen Servernamen gehandhabt wird:

Server {
 hören Sie 192.168.1.1:80;
 Servername example.org www.example.org;
}

Server {
 hören Sie 192.168.1.1:80;
 Servername Beispiel.net www.Beispiel.net;
}

Server {
 hören Sie 192.168.1.2:80;
 Servername Beispiel.com www.Beispiel.com;
}

In dieser Konfiguration gleicht nginx zuerst die IP ab und dann den Servernamen. Wenn kein Servername übereinstimmt, wird der Standardserver verwendet. Wenn beispielsweise eine Anforderung für den Domänennamen www.example.com von 192.168.1.1:80 kommt, aber nur zwei Server auf 192.168.1.1:80 lauschen und keiner von ihnen www.example.com entsprechen kann, wird der Standardhost der beiden Server verwendet. Da der Standardserver nicht zum Definieren des Listeners verwendet wird, ist der erste Server, www.example.org, der Standard. Natürlich können Sie den Standardserver definieren:

Server {
 hören Sie 192.168.1.1:80;
 Servername example.org www.example.org;
}

Server {
 hören Sie 192.168.1.1:80 Standardserver;
 Servername Beispiel.net www.Beispiel.net;
}

Server {
 hören Sie 192.168.1.2:80 Standardserver;
 Servername Beispiel.com www.Beispiel.com;
}

Passender Standort

Nachdem nginx einen Server gefunden hat, wird es die Anfrage über den Standort weiter verarbeiten. Nachfolgend sehen Sie ein Beispiel:

Server {
 hören Sie 172.17.0.3:80;
 Servername _;

 Standort / {
 Rückgabe 401;
 }

 Standort ~*\.(gif|jpg|png)$ {
 Rückgabe 402;
 }
 
 Standort ~*\.(gif|jpg|png)$ {
 Rückgabe 404;
 }

 Standort /API {
 Rückgabe 403;
 }
}

Nginx sucht zunächst an allen Standorten nach dem Präfix, um eine Übereinstimmung zu finden. Nach der Übereinstimmung mit dem Präfix werden die durch den regulären Ausdruck definierten Standorte der Reihe nach abgeglichen. Wenn eine Übereinstimmung gefunden wird, wird die Verarbeitung beendet. Wenn keine Übereinstimmung gefunden wird, wird der Standort verwendet, der zuvor mit dem Präfix übereinstimmte. Im Folgenden finden Sie ein Beispiel für eine spezifische Übereinstimmung:

  • Eine /x.gif-Anforderung gleicht zuerst das Präfix / ab, verwendet dann das verbleibende x.gif und den regulären Ausdruck für den Standort zum Abgleichen, wobei zuerst der Standort ~*\.(gif|jpg|png)$ übereinstimmt, und gibt 402 zurück.
  • Eine /x.pdf-Anfrage. Da x.pdf nicht zugeordnet werden kann, wird es unter Verwendung des Speicherorts / verarbeitet.
  • Ein /api/x.gif gleicht zuerst das Präfix /api ab, verwendet dann die verbleibenden x.gif- und Standort-regulären Ausdrücke zum Abgleichen, wobei zuerst der Standort ~*\.(gif|jpg|png)$ übereinstimmt, und gibt 402 zurück.
  • Eine Anfrage an /api/x.pdf. Da x.pdf nicht zugeordnet werden kann, wird es unter Verwendung des Speicherorts /api verarbeitet.

siehe

  • Wie nginx eine Anfrage verarbeitet
  • Servernamen

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Nginx-Standortabgleichsregeln
  • Detaillierte Erläuterung der Standortdirektiven-Matching-Regeln des Nginx-Servers
  • Beispiel einer Nginx-Standortübereinstimmungsregel
  • Eine kurze Zusammenfassung der Nginx-Übereinstimmungsregeln (empfohlen)
  • Einführung in Standortabgleichsregeln in Nginx
  • Detaillierte Zusammenfassung der URI-Übereinstimmungsregeln der Nginx Location-Direktive

<<:  Detaillierte Erklärung der MySQL Master-Slave-Inkonsistenz und Lösungen

>>:  WeChat-Applet-Beispiel für die direkte Verwendung von Funktionen in {{ }}

Artikel empfehlen

So zeigen Sie die Erstellungszeit von Dateien in Linux an

1. Einleitung Ob die Erstellungszeit einer Datei ...

Zehn nützliche und einfache MySQL-Funktionen

Funktion 0. Aktuelle Uhrzeit anzeigen Befehl: sel...

MySQL-Benutzer und -Berechtigungen und Beispiele zum Knacken des Root-Passworts

MySQL-Benutzer und -Berechtigungen In MySQL gibt ...

So verwenden Sie die Glog-Protokollbibliothek in einer Linux-Umgebung

Linux-Bibliothek generieren Die Linux-Version ver...

Beispielcode einer SVG-Schaltfläche basierend auf einer CSS-Animation

Der spezifische Code lautet wie folgt: <a href...

So handhaben Sie den Token-Ablauf in WeChat-Miniprogrammen

Inhaltsverzeichnis Fazit zuerst Frage Lösung Verw...

Docker verwendet Supervisor zur Verwaltung von Prozessvorgängen

Ein Docker-Container startet beim Start beispiels...

Detaillierte Erläuterung der Nginx-Anti-Hotlink- und Anti-Crawler-Konfiguration

Erstellen Sie eine neue Konfigurationsdatei (gehe...

Beispiel zum Deaktivieren der Browser-Cache-Konfiguration im Vue-Projekt

Beim Freigeben eines Projekts müssen Sie häufig d...

Beispiele und bewährte Vorgehensweisen für die Seitennummerierung

<br />Struktur und Hierarchie reduzieren die...

Einführung in die Linux-Dateikomprimierung und -Verpackung

1. Einführung in Komprimierung und Verpackung All...