Das Umschreibmodul ist das Modul ngx_http_rewrite_module. Seine Hauptfunktion besteht darin, die Anforderungs-URI umzuschreiben. Es ist das standardmäßig in Nginx installierte Modul. Das Umschreibmodul schreibt die URI entsprechend dem PCRE-regulären Ausdruck um, initiiert dann eine interne Umleitung und gleicht den Standort ab oder führt direkt eine 30-fache Umleitung durch, um zum Client zurückzukehren. Die Reihenfolge der Befehlsausführung besteht darin, zuerst die Befehle zum Umschreiben des Moduls im Serverblock auszuführen, um nach dem Umschreiben die Anforderungs-URI zu erhalten.
(2) Führen Sie die Anweisungen zum Umschreiben des Moduls nacheinander an der entsprechenden Stelle aus Anweisung Beispiel Server { hören Sie 8080; # Hier stoppt break die Ausführung der Return-Anweisung des Serverblocks (die Return-Anweisung gehört zum Rewrite-Modul) # Wenn Sie es auskommentieren, werden alle eingehenden Anfragen ok zurückgegeben brechen; gebe 200 "ok" zurück; Standort = /testbreak { brechen; gib 200 $request_uri zurück; Proxy-Passwort http://127.0.0.1:8080/anderes; } Standort / { gib 200 $request_uri zurück; } } # Senden Sie die Anfrage wie folgt# curl 127.0.0.1:8080/testbreak # /andere # Sie können sehen, dass `/other` anstelle von `/testbreak` zurückgegeben wird, was darauf hinweist, dass die Anweisung `proxy_pass` noch ausgeführt wird. # Das heißt, die Anweisungen anderer Module werden nicht durch break unterbrochen. # (proxy_pass ist die Anweisung von ngx_http_proxy_module) Wenn Kontext: Server, Standort Bestimmt, ob der Inhalt der if-Blockanweisung basierend auf den angegebenen Bedingungen ausgeführt werden soll Mehrere Urteilsbedingungen in if Beachten Sie, dass die Werte in den obigen Punkten 1, 2 und 3 Variablen sein müssen, während die Werte in den Punkten 4, 5, 6 und 7 entweder Variablen oder Zeichenfolgen sein können. Die grundlegende Verwendung von -f/-d/-e/-x ist dieselbe wie bei bash. setze $variable "0"; wenn ($variable) { # Wird nicht ausgeführt, da „0“ falsch ist brechen; } # Es ist kein Problem, Variablen zum Abgleichen von regulären Ausdrücken zu verwenden, wenn ( $http_host ~ "^star\.igrow\.cn$" ) { brechen; } # String entspricht regulärem Ausdruck und meldet einen Fehler, wenn ( "star" ~ "^star\.igrow\.cn$" ) { brechen; } # Überprüfen Sie, ob sowohl dateiähnliche Zeichenfolgen als auch Variablen in Ordnung sind, if ( !-f "/data.log" ) { brechen; } wenn ( !-f $dateiname ) { brechen; } zurückkehren Kontext: Server, Standort, wenn Rückgabecode [Text]; Rückgabecode-URL; Rücksprung-URL; Stoppt die Verarbeitung und gibt den angegebenen Code an den Client zurück. Der nicht standardmäßige Code 444 schließt die Verbindung, ohne einen Antwortheader zu senden. Ab Version 0.8.42 kann die Return-Anweisung eine Umleitungs-URL angeben (der Statuscode kann 301, 302, 303, 307 sein). Es gibt einen Sonderfall, in dem die umgeleitete URL als lokale URL dieses Servers angegeben werden kann. In diesem Fall generiert nginx automatisch eine vollständige URL basierend auf dem angeforderten Protokoll $scheme, Servername in Umleitung und Port in Umleitung (hierbei ist zu beachten, dass die Anweisungen Servername in Umleitung und Port in Umleitung angeben, ob der Servername und der Abhörport im Serverblock als Umleitungen verwendet werden sollen). # Rückkehrcode [Text]; Rückkehr ok zum Client-Standort = /ok { gebe 200 "ok" zurück; } # Rückgabecode URL; Temporäre Weiterleitung zum Baidu-Standort = /redirect { Rückgabe 302 http://www.baidu.com; } # return URL; Wie oben ist auch hier der Standardwert eine temporäre Umleitungsadresse = /redirect { zurück zu http://www.baidu.com; } umschreiben
Regex-Ersetzung neu schreiben [Flag]; Die Rewrite-Direktive verwendet den angegebenen regulären Ausdruck (regex), um die angeforderte URI abzugleichen. Wenn die Übereinstimmung erfolgreich ist, wird die URI durch Ersetzung geändert. Umschreibeanweisungen werden in der Reihenfolge ausgeführt, in der sie in der Konfigurationsdatei erscheinen. Mit dem Flag kann die weitere Abarbeitung der Anweisung abgebrochen werden. Wenn die Ersetzungszeichenfolge mit http://, https:// oder $scheme beginnt, beenden Sie die Verarbeitung nachfolgender Inhalte und leiten Sie sie direkt zurück zum Client um. Im ersten Fall wird der String mit http:// umgeschrieben. Standort / { # Bei Übereinstimmung mit dem regulären Ausdruck /test1/(.*) wird die Anfrage vorübergehend auf http://www.$1.com umgeleitet # Entspricht einer als Umleitung geschriebenen Flagge schreibe /test1/(.*) http://www.$1.com neu; gebe 200 "ok" zurück; } # Geben Sie 127.0.0.1:8080/test1/baidu im Browser ein # Vorübergehende Weiterleitung zu www.baidu.com # Der folgende Return-Befehl kann nicht ausgeführt werden Im zweiten Fall wird der String ohne http:// umgeschrieben. Standort / { schreibe /test1/(.*) www.$1.com neu; gebe 200 "ok" zurück; } # Senden Sie die Anfrage wie folgt# curl 127.0.0.1:8080/test1/baidu # OK # Hier gibt es kein http://, es handelt sich also nur um eine einfache Umschreibung. Die angeforderte URI wird von /test1/baidu in www.baidu.com umgeschrieben # Da der Umschreibbefehl sequenziell ausgeführt wird, besteht der nächste Schritt darin, den Rückgabebefehl auszuführen und die Antwort ist in Ordnung Vier Flaggen des Umschreibens 1.letzte # Wenn es kein Umschreiben und kein Flag danach gibt, wird es sequenziell ausgeführt. # Wenn es an der Position keine Umschreibmodulanweisung gibt, die ausgeführt werden kann, wird es umgeschrieben, um eine neue Runde der Positionsübereinstimmung mit der Position / { einzuleiten. # Ohne Flag ist die Standardreihenfolge „rewrite ^/test1 /test2“; rewrite ^/test2 /test3; # Eine neue Runde von Location-Matching-URIs wird hier eingeleitet, nämlich /test3 } Standort = /test2 { returniere 200 "/test2"; } Standort = /test3 { returniere 200 "/test3"; } # Senden Sie die folgende Anfrage# curl 127.0.0.1:8080/test1 # /test3 Der Unterschied zwischen Last und Break
Standort / { neu schreiben ^/test1 /test2; rewrite ^/test2 /test3 last; # Eine neue Runde von Location-Matching-URIs wird hier eingeleitet: /test3 neu schreiben ^/test3 /test4; Proxy-Passwort http://www.baidu.com; } Standort = /test2 { returniere 200 "/test2"; } Standort = /test3 { returniere 200 "/test3"; } Standort = /test4 { returniere 200 "/test4"; } # Senden Sie die folgende Anfrage# curl 127.0.0.1:8080/test1 # /test3 Wenn Sie den obigen Codeort / in den folgenden Codeort / { ändern, neu schreiben ^/test1 /test2; # Eine neue Runde des Standortabgleichs wird hier nicht eingeleitet; die nachfolgenden Anweisungen zum Umschreiben des Moduls werden beendet und die umgeschriebene URI lautet /more/index.html. neu schreiben ^/test2 /more/index.html break; rewrite /more/index\.html /test4; # Dieser Befehl wird ignoriert. # Da proxy_pass kein Befehl des Rewrite-Moduls ist, wird er nicht durch break proxy_pass https://www.baidu.com; beendet. } # Senden Sie die folgende Anfrage# Geben Sie 127.0.0.1:8080/test1 in den Browser ein # Agent zur Baidu-Produktseite https://www.baidu.com/more/index.html; Anforderungsparameter nach dem Umschreiben <br /> Wenn die Ersetzungszeichenfolge replacement neue Anforderungsparameter enthält, werden die vorherigen Anforderungsparameter dahinter angehängt. Wenn Sie die vorherigen Parameter nicht möchten, setzen Sie am Ende der Ersetzungszeichenfolge ein Fragezeichen, um das Anhängen zu vermeiden. # Da am Ende ein ? hinzugefügt wird, werden die ursprünglichen Anforderungsparameter nach dem Umschreiben nicht an die URL angehängt. rewrite ^/users/(.*)$ /show?user=$1? last; Protokoll neu schreiben
Aktivieren oder deaktivieren Sie das Protokoll der Ausführung von Rewrite-Modulanweisungen. Wenn aktiviert, zeichnet Rewrite Protokolle auf Benachrichtigungsebene im Nginx-Fehlerprotokoll auf. Die Standardeinstellung ist deaktiviert. Syntax: rewrite_log on | off; Satz Kontext: Server, Standort, wenn Legt den Wert der angegebenen Variable fest. Der Wert einer Variablen kann Text, Variablen oder eine Kombination davon enthalten. Standort / { setze $var1 "Host ist"; setze $var2 $host; setze $var3 "uri ist $request_uri"; return 200 „Antwort ok $var1$var2$var3“; } # Senden Sie die folgende Anfrage# curl 127.0.0.1:8080/test # Antwort ok, Host ist 127.0.0.1, URI ist /test nicht initialisierte_variable_warn
Steuert, ob Warnungen zu nicht initialisierten Variablen protokolliert werden. Standardmäßig aktiviert Interne Umsetzung Die Moduldirektiven ngx_http_rewrite_module werden während der Konfigurationsphase in interne Direktiven kompiliert, die während der Anforderungsverarbeitung interpretiert werden. Der Interpreter ist eine einfache virtuelle Stack-Maschine. Beispielsweise die Anweisung
Wird in folgende Anleitung übersetzt:
Beachten Sie, dass oben keine Limit_Rate-Direktive vorhanden ist, da sie nichts mit dem Modul ngx_http_rewrite_module zu tun hat. Erstellen Sie eine separate Konfiguration für den if-Block. Wenn die Bedingung erfüllt ist, wird für diese Konfiguration eine Anforderung mit einer Limitrate von 10.000 zugewiesen. \ Anweisung
Wenn der erste Schrägstrich im regulären Ausdruck in Klammern gesetzt wird, kann er vereinfacht werden:
Die entsprechende Anweisung würde folgendermaßen aussehen:
Standort (nicht umschreibbares Modul) Grammatik Verwenden Sie es im Serverblock, beispielsweise:
Standortausdruckstyp Wenn Sie einen Pfad direkt schreiben, wird der Pfad mit einem regulären Ausdruck abgeglichen, wobei die Groß-/Kleinschreibung beachtet wird. Priorität Dies ist das Ende dieses Artikels mit der detaillierten Erklärung des Umschreibmoduls von Nginx. Weitere relevante Inhalte zum Umschreiben von Nginx finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: css Alle Elemente ab dem n-ten abrufen
>>: Vue-Formulareingabebindung V-Modell
Globale Nginx-Variablen Es gibt viele globale Var...
Alle Websites, ob offiziell, E-Commerce, soziale ...
MySQL-Installationstutorial für Windows-Systeme h...
Müssen die Felder und Eigenschaften der Tabelle i...
Einführung Kürzlich habe ich herausgefunden, dass...
Heute stelle ich zwei HTML-Tags vor, die ich nich...
Inhaltsverzeichnis Vorwort Start Schritt Fehlerbe...
01. Befehlsübersicht Der Befehl tr kann Zeichen a...
Unter den Anforderungen des heutigen responsiven ...
Inhaltsverzeichnis 1. MySQL-Platzhalter-Fuzzy-Abf...
Ab MySQL 8.0.16 können Sie eine Richtlinie zum Ab...
Allgemeine utf8mb4-Sortierregeln in MySQL sind: u...
In diesem Artikel finden Sie das grafische Tutori...
* Adresse - Adresse * Blockzitat - Blockzitat * Mi...
Wirkung: Ideen: Verwenden Sie das Eingabetypattri...