Server-Matching-Logik
nginx konzentriert sich hauptsächlich auf die Felder „Listen“ und „Servername“ im Serverblock, wenn es darum geht, zu entscheiden, welcher Serverblock die Anforderung ausführen soll Port: Wenn das Listenfeld nicht explizit konfiguriert ist, ist die Standardüberwachung 0.0.0.0:80 (Root) oder 0.0.0.0:8080 (Nicht-Root).
listen kann konfiguriert werden als:
Eine Kombination aus IP und Port
Auswahl des zu verwendenden Servers lauten wie folgt:
nginx konvertiert zunächst alle „unvollständigen“ Listen-Anweisungen, z. B. solche ohne Listen-Feld, in listen 0.0.0.0:80 , listen 1.1.1.1 Konvertieren in listen 1.1.1.1:80 usw.
# server block 1server { listen 192.168.0.1; server_name other.com ... } # server block 2server { listen 80; server_name example.com ... }
Wenn die beste Übereinstimmung nicht gemäß der Listen-Direktive erhalten werden kann nginx beginnt mit der Analyse der server_name-Anweisung. Dieser Wert enthält den Domänennamen oder die IP-Adresse, die der Client tatsächlich anfordern möchte, basierend auf diesem Wert . Die Abgleichsregeln lauten wie folgt:
nginx versucht, einen Serverblock zu finden, der genau mit den Werten server_name und host übereinstimmt, wird der erste übereinstimmende Serverblock verwendet.
Wenn keine genaue Übereinstimmung vorliegt Wenn ein 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.
Sucht nach einem Serverblock, der server_name mithilfe eines regulären Ausdrucks definiert (beginnend mit ~). Wenn mehrere Übereinstimmungen gefunden werden, wird die erste Übereinstimmung verwendet.
Wenn kein Serverblock gefunden wird, der mit dem regulären Ausdruck übereinstimmt, wählt Nginx einen aus Standardserverblock, der dem Listenfeld entspricht. Jede IP- und Portkombination kann mit einem und nur einem Standardserverblock konfiguriert werden. Wenn keiner vorhanden ist, wird der erste Server in der verfügbaren Liste ausgewählt (die Auswahl erfolgt zu diesem Zeitpunkt zufällig). die Reihenfolge ist nicht festgelegt)
Beispiele sind wie folgt:
server { listen 80; server_name www.domain.com; ... }
(2) Zeichenfolge, die mit * als Platzhalter beginnt:
server { listen 80; server_name *.domain.com; ... }
server { listen 80; server_name www.*; ... }
(4) Passender regulärer Ausdruck:
server { listen 80; server_name ~^(?.+)\.domain\.com$; ... }
server { listen 80 default_server; server_name _; return 444; }
Lassen Sie Nginx die Verbindung zum Browser trennen, indem Sie 444, den nicht standardmäßigen Fehlercode von Nginx, zurückgeben
Urteilsregeln(1) Wenn der am längsten übereinstimmende Ort den Modifikator ^~ hat und Nginx diesen Ort sofort verwendet, um auf die Anfrage zu antworten. (2) Wenn der am längsten übereinstimmende Ort nicht den Modifikator ^~ hat, speichert Nginx den Ort vorübergehend Übereinstimmung und dann fortfahren. Nach der Bestimmung und Speicherung des längsten übereinstimmenden Präfix-Standortblocks prüft Nginx weiterhin den Übereinstimmungsort des regulären Ausdrucks (Groß-/Kleinschreibung beachten). Gemäß den Anforderungen wird der erste Speicherort für reguläre Ausdrücke ausgewählt, der mit der angeforderten URI übereinstimmt. 5 Wenn kein Speicherort für reguläre Ausdrücke gefunden wird, der mit der angeforderten URI übereinstimmt, wird der Speicherort mit dem längsten Präfix verwendet, der zuvor gespeichert wurde auf die Anfrage antworten
Ergänzung
Normalerweise wird die Anfrage, sobald Sie sich für die Beantwortung einer Anfrage für einen bestimmten Standort entschieden haben, an diesem Standort bearbeitet, unabhängig von anderen Standorten. Bestimmte Anweisungen am Standort lösen jedoch einen neuen Standortabgleich aus, wie zum Beispiel:
( 1) try_files
(2) rewrite
(3) error_page
Das obige ist der detaillierte Inhalt vonWas ist die Matching-Logik von Server und Standort in Nginx?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!