1. Regulärer Ausdruck für den Standort Schauen wir uns ein Beispiel an: Standort = / { # Genaue Übereinstimmung / , auf den Hostnamen darf keine Zeichenfolge folgen [ Konfiguration A ] } Standort / { # Da alle Adressen mit / beginnen, wird diese Regel auf alle Anfragen zutreffen. # Aber reguläre Ausdrücke und längste Zeichenfolgen werden zuerst abgeglichen [Konfiguration B] } Standort /Dokumente/ { # Findet alle Adressen, die mit /documents/ beginnen. Nach dem Treffer wird die Suche fortgesetzt. # Dieser wird nur verwendet, wenn die folgenden regulären Ausdrücke nicht übereinstimmen [Konfiguration C] } Ort ~ /documents/Abc { # Findet Übereinstimmungen mit allen Adressen, die mit /documents/Abc beginnen. Wenn die Übereinstimmung gefunden wurde, suchen Sie weiter unten. # Dieser wird nur verwendet, wenn der folgende reguläre Ausdruck nicht mit [configuration CC] übereinstimmt. } Standort ^~ /images/ { # Findet Übereinstimmungen mit allen Adressen, die mit /images/ beginnen. Nachdem die Übereinstimmung gefunden wurde, beenden Sie die Suche nach regulären Ausdrücken und verwenden Sie diesen. [ Konfiguration D ] } Standort ~* \.(gif|jpg|jpeg)$ { # Stimmt mit allen Anfragen überein, die mit gif, jpg oder jpeg enden. # Allerdings werden alle Anfragen für Bilder unter /images/ von Konfiguration D verarbeitet, weil ^~ diesen regulären Ausdruck nicht erreichen kann [Konfiguration E]. } Standort /Bilder/ { # Das Zeichen entspricht /images/. Wenn Sie weiter nach unten schauen, werden Sie feststellen, dass ^~ existiert [ Konfiguration F ] } Standort /images/abc { # Das längste Zeichen entspricht /images/abc. Wenn Sie weiter nach unten schauen, werden Sie feststellen, dass ^~ vorhanden ist. # Die Reihenfolge der Platzierung von F und G ist irrelevant [Konfiguration G] } Standort ~ /images/abc/ { # Erst wenn Konfiguration D entfernt wird, wird es wirksam: Suchen Sie zuerst nach einer Übereinstimmung mit der Adresse, die mit Konfiguration G beginnt, setzen Sie die Suche fort und verwenden Sie [Konfiguration H], wenn dieser reguläre Ausdruck übereinstimmt. } Speicherort ~* /js/.*/\.js Standortpräfix Kein Präfix stimmt mit Standorten überein, die mit dem angegebenen Muster beginnen = Genaue Übereinstimmung, beginnt nicht mit dem angegebenen Muster ~ Regulärer Ausdrucksabgleich, Groß-/Kleinschreibung beachten ~* Übereinstimmung mit regulären Ausdrücken, ohne Berücksichtigung der Groß-/Kleinschreibung ^~ Nicht reguläre Übereinstimmung, Übereinstimmung mit Orten, die mit dem angegebenen Muster beginnen Standortabgleichsreihenfolge Mehrere reguläre Standorte werden direkt in der Reihenfolge abgeglichen, in der sie geschrieben werden. Sobald eine Übereinstimmung erfolgreich ist, wird keine weitere Übereinstimmung durchgeführt. Gewöhnliche (nicht reguläre) Standorte werden weiter nach unten verschoben, bis die höchste Übereinstimmung (maximale Präfixübereinstimmung) gefunden wird. Wenn sowohl der gemeinsame Standort als auch der reguläre Standort vorhanden sind und der reguläre Standort erfolgreich abgeglichen wurde, wird der gemeinsame Standort nicht erneut abgeglichen. Wenn alle Standorttypen vorhanden sind, "="-Übereinstimmung > "^~"-Übereinstimmung > reguläre Übereinstimmung > normal (maximale Präfixübereinstimmung) Befehl: (Standort =) > (Standort vollständiger Pfad) > (Standort ^~ Pfad) > (Standort ~,~* reguläre Sequenz) > (Standort teilweiser Startpfad) > (/) Die oben aufgeführten Übereinstimmungsergebnisse Gemäß der obigen Standortbeschreibung ergeben sich folgende Übereinstimmungsbeispiele: Genaue Übereinstimmung, selbst /index.html wird nicht übereinstimmen. /downloads/download.html -> Konfiguration B Nach dem Abgleichen von B gibt es unten keine Übereinstimmung. Verwenden Sie daher B /images/1.gif -> Konfiguration D Passt zu F, passt zu D, hört auf, nach unten zu gehen /images/abc/def -> Konfiguration D Die längste Übereinstimmung ist G, sie geht nach unten bis zur Übereinstimmung D und endet dort. Sie können sehen, dass alles, was mit /images/ beginnt, mit D übereinstimmt und endet. Es ergibt keinen Sinn, hier FG zu schreiben, und H wird nie an die Reihe kommen. Dies dient nur zur Veranschaulichung der Übereinstimmungsreihenfolge. /documents/document.html -> Konfiguration C Übereinstimmungen mit C, keine Übereinstimmungen unten, verwenden Sie C /documents/1.jpg -> Konfiguration E Stimmt mit C überein und dann mit E /documents/Abc.jpg -> Konfiguration CC Die längste Übereinstimmung ist C, und die reguläre Sequenz entspricht CC, nicht E. Praktische Anwendungsvorschläge Ich denke, dass es in der Praxis mindestens drei passende Regeldefinitionen gibt, und zwar die folgenden: #Direkte Zuordnung zum Website-Stamm. Es ist häufiger, über den Domänennamen auf die Homepage der Website zuzugreifen. Dies beschleunigt die Verarbeitung, heißt es auf der offiziellen Website. #Dies wird direkt an den Backend-Anwendungsserver weitergeleitet, oder es kann eine statische Homepage sein# Die erste erforderliche Regel location = / { Proxy-Passwort http://tomcat:8080/index } # Die zweite obligatorische Regel besteht darin, statische Dateianforderungen zu verarbeiten. Dies ist die Stärke von nginx als HTTP-Server. # Es gibt zwei Konfigurationsmodi, Verzeichnisübereinstimmung oder Suffixübereinstimmung. Wählen Sie einen aus oder verwenden Sie beide Speicherorte ^~ /static/ { Wurzel /webroot/static/; } Standort ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { Wurzel /webroot/res/; } #Die dritte Regel ist eine allgemeine Regel, die zum Weiterleiten dynamischer Anforderungen an den Back-End-Anwendungsserver verwendet wird. #Nicht statische Dateianforderungen sind standardmäßig dynamische Anforderungen, und Sie können sie entsprechend Ihrer tatsächlichen Situation erfassen. #Schließlich haben einige beliebte Frameworks mittlerweile selten die Suffixe .php und .jsp. location / { Proxy-Passwort http://tomcat:8080/ } 2. Regeln neu schreiben Die Umschreibfunktion verwendet die von nginx bereitgestellten globalen Variablen oder die von Ihnen selbst festgelegten Variablen, kombiniert mit regulären Ausdrücken und Flags, um das Umschreiben und Umleiten von URLs zu erreichen. rewrite kann nur in server{}, location{}, if{} platziert werden und kann nur auf die Zeichenfolge nach dem Domänennamen angewendet werden, mit Ausnahme der übergebenen Parameter Beispielsweise wird mit http://jb51.net/a/we/index.php?id=1&u=str nur /a/we/index.php umgeschrieben. Syntaxrewrite Wenn ein relativer Domänenname oder eine relative Parameterzeichenfolge funktioniert, können Sie die globale Variablenübereinstimmung verwenden oder den Reverse-Proxy „proxy_pass“ verwenden. Es zeigt, dass sich Rewrite- und Location-Funktionen ähneln und beide Sprünge ausführen können. Der Hauptunterschied besteht darin, dass Rewrite den Pfad ändert, um Ressourcen innerhalb desselben Domänennamens abzurufen, während Location den Zugriff auf eine Klasse von Pfaden steuert oder einen Reverse-Proxy ausführt, der Proxy-Pass an andere Maschinen ausführen kann. In vielen Fällen wird auch das Umschreiben an einem bestimmten Ort durchgeführt. Die Reihenfolge ihrer Ausführung ist: Führen Sie die Umschreibeanweisung des Serverblocks aus Durchführen eines Standortabgleichs Führen Sie die Umschreibeanweisung am ausgewählten Speicherort aus. Wenn die URI in einem beliebigen Schritt neu geschrieben wird, werden die Schritte 1 bis 3 in einer Schleife erneut ausgeführt, bis die echte Datei gefunden wird. Wenn die Schleife mehr als 10 Mal ausgeführt wird, wird ein interner Serverfehler 500 zurückgegeben. 2.1 Flagge
Da 301 und 302 nicht einfach nur den Statuscode zurückgeben können, muss auch eine Umleitungs-URL vorhanden sein. Aus diesem Grund kann die Rückgabeanweisung nicht 301,302 zurückgeben. Der Unterschied zwischen last und break ist hier etwas schwierig zu verstehen: „Last“ wird normalerweise in „Server“ und „if“ geschrieben, während „Break“ normalerweise in „Location“ verwendet wird. 2.2 if-Anweisung und globale Variablen wenn Urteilsanweisung Die Syntax lautet Wenn der Ausdruck nur eine Variable ist und der Wert leer ist oder eine beliebige Zeichenfolge ist, die mit 0 beginnt, wird er als falsch betrachtet. Wenn Sie Variablen und Inhalte direkt vergleichen, verwenden Sie Zum Beispiel: wenn ($http_user_agent ~ MSIE) { umschreiben ^(.*)$ /msie/$1 break; } //Wenn UA „MSIE“ enthält, schreiben Sie die Anfrage in das Verzeichnis /msid/ um, if ($http_cookie ~* "id=([^;]+)(?:;|$)") { setze $id $1; } //Wenn das Cookie mit dem regulären Ausdruck übereinstimmt, setzen Sie die Variable $id so, dass sie dem Referenzteil des regulären Ausdrucks entspricht, if ($request_method = POST) { Rückgabe 405; } //Wenn die Übermittlungsmethode POST ist, ist der Rückgabestatus 405 (Methode nicht zulässig). Rückkehr kann nicht zurückkehren 301,302 wenn ($langsam) { Grenzrate 10k; } // Geschwindigkeitsbegrenzung, $slow kann mit dem Befehl set festgelegt werden if (!-f $request_filename){ brechen; Proxy-Passwort http://127.0.0.1; } //Wenn der angeforderte Dateiname nicht existiert, Reverse-Proxy zum lokalen Host. Der Break hier stoppt auch die Umschreibprüfung, wenn ($args ~ post=140){ umschreiben ^ http://example.com/ permanent; } //Wenn die Abfragezeichenfolge „post=140“ enthält, permanente Weiterleitung zu example.com Standort ~* \.(gif|jpg|png|swf|flv)$ { valid_referers, keine blockiert, www.jefflei.com, www.leizhenfang.com; wenn ($ungültiger_Referrer) { Rückgabe 404; } //Anti-Hotlinking} Globale Variablen Die folgenden globalen Variablen können als Urteile verwendet werden
2.3 Allgemeine reguläre Ausdrücke
2.4 Beispiel zum Umschreiben Beispiel 1: http { # Definieren Sie das Bildprotokollformat log_format imagelog '[$time_local] ' $image_file ' ' $image_type ' ' $body_bytes_sent ' ' $status; # Umschreibeprotokoll aktivieren rewrite_log on; Server { Wurzel /home/www; Standort / { # Informationen zur Neuschreibregel error_log logs/rewrite.log notice; # Beachten Sie, dass hier einfache Anführungszeichen verwendet werden sollten, um {} zu vermeiden. schreibe '^/images/([az]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4 neu; # Beachten Sie, dass Sie nach der obigen Regel nicht den Parameter „letzten“ hinzufügen können, da sonst der folgende Set-Befehl nicht ausgeführt wird: set $image_file $3; Setze $image_type $4; } Standort /Daten { #Geben Sie das Protokollformat für Bilder an, um den Bildtyp und die Bildgröße zu analysieren access_log logs/images.log mian; Stammverzeichnis /Daten/Bilder; # Wenden Sie die zuvor definierten Variablen an. Stellen Sie zuerst fest, ob die Datei vorhanden ist. Wenn nicht, stellen Sie dann fest, ob das Verzeichnis vorhanden ist. Wenn nicht, springen Sie zur letzten URL try_files /$arg_file /image404.html. } Standort = /image404.html { # Wenn das Bild nicht existiert, geben Sie spezifische Informationen zurück. return 404 „Bild nicht gefunden\n“; } } Bei einer Anfrage wie /images/ef/uh7b3/test.png wird sie in /data?file=test.png umgeschrieben, sodass sie mit dem Speicherort /data übereinstimmt. Überprüfen Sie zunächst, ob die Datei /data/images/test.png vorhanden ist. Wenn sie vorhanden ist, antworten Sie normal. Wenn nicht, schreiben Sie tryfiles an den neuen Speicherort image404 um und geben Sie direkt einen 404-Statuscode zurück. Beispiel 2: neu schreiben ^/images/(.*)_(\d+)x(\d+)\.(png|jpg|gif)$ /resizer/$1.$4?width=$2&height=$3? last; Bei Dateianforderungen wie /images/bla_500x400.jpg werden diese an die Adresse /resizer/bla.jpg?width=500&height=400 umgeschrieben und es wird weiterhin versucht, den Speicherort abzugleichen. Das Obige ist eine Zusammenfassung der Regularisierung des Nginx-Konfigurationsorts und des Schreibens von Umschreibregeln. In den folgenden verwandten Artikeln finden Sie weitere Artikel zur Einführung in die Nginx-Konfiguration. Ich hoffe, es kann Ihnen helfen. Das könnte Sie auch interessieren:
|
<<: Eine kurze Diskussion zum Problem von Daten mit Nullwerten in der MySQL-Datenbank
>>: Wartungsmethode für den Innodb-Systemtabellenbereich
Einführung Memcached ist ein verteiltes Caching-S...
Container sind ein weiteres Kernkonzept von Docke...
Die Javascript-Funktion zum Konvertieren von <t...
mysqldump-Tool-Sicherung Sichern Sie die gesamte ...
Die Aktion des Formulars unterscheidet sich vom UR...
<tr> <th width="12%">AAAAA&l...
Lösung für MySQLSyntaxErrorException beim Herstel...
Inhaltsverzeichnis 1. Konzept 1.1 Definition 1.2 ...
Inhaltsverzeichnis Abfrage zum Verbinden mehrerer...
Registerkarten: Kategorie + Beschreibung Tag-Leis...
Ich habe kürzlich in einem Projekt nginx und im B...
Einführung in Selenium Grid Obwohl einige neue Fu...
Inhaltsverzeichnis 1. Ich habe das Root-Passwort ...
Inhaltsverzeichnis 1. Regel 1: Objekt.Methode() 1...
In diesem Artikel wird der spezifische Code der U...