1. Zusammenfassung der Standortnutzung Der Standort kann unterschiedliche Anfragetypen unterschiedlichen Verarbeitungsmethoden zuordnen. 1. Standortnutzung Speicherort ~* /js/.*/\.js
Die Reihenfolge der Standortübereinstimmung ist „Zuerst Übereinstimmung mit regulärem Wert, dann Übereinstimmung mit allgemeinem Wert“. Korrektur: Die Reihenfolge der Standortübereinstimmung ist eigentlich „zuerst allgemeine Übereinstimmung, dann reguläre Übereinstimmung“. Wenn ich das sage, wird mir sicherlich jeder widersprechen, denn das Prinzip „Zuerst das Gemeinsame abgleichen, dann das Normale abgleichen“ kann die praktische Erfahrung, an die jeder gewöhnt ist, nicht erklären: „Zuerst das Normale abgleichen, dann das Gemeinsame abgleichen“. Hier kann ich nur kurz erklären, dass der Grund für dieses Missverständnis darin liegt, dass der reguläre Abgleich Vorrang vor dem normalen Abgleich hat. 2. Beispiele für die Standortnutzung Regulärer Ausdruck für den Standort: 1. # Genaue Übereinstimmung /, auf den Hostnamen kann keine Zeichenfolge folgen Standort = / { [ Konfiguration A ] } 2.# Alle Adressen beginnen mit /, daher entspricht diese Regel letztendlich der Standardanforderung # Aber reguläre Ausdrücke und längste Zeichenfolgen stimmen mit location / { überein [ Konfiguration B ] } Beispiel: Standort / { Proxy-Passwort http://Serverpools; } #Diese Regel kann nur dann abgeglichen werden, wenn andere Regeln die Anforderungen nicht erfüllen. Sie wird als letzte abgeglichen, mit dem niedrigsten Übereinstimmungsgrad. Die oben implementierte Funktion lautet: Wenn die Website beispielsweise www.blog.com ist; wenn danach nichts eingegeben wird, Wenn andere Regeln nicht übereinstimmen, wird die Anforderung schließlich an den Server im Lastausgleichspool übergeben. 3.# Findet alle Adressen, die mit /documents/ beginnen. Nach dem Abgleich wird die Suche fortgesetzt # Dieser wird nur verwendet, wenn der folgende reguläre Ausdruck nicht mit dem Speicherort /documents/ { übereinstimmt. [ Konfiguration C ] } Beispiel: Standort /static/ { umschreiben ^ http://www.abc.com; } #Die oben implementierte Funktion: Angenommen, der Domänenname der Website lautet www.blog.com. Dann wird die obige Funktion so konfiguriert, dass www.blog.com/static/ eingegeben wird, unabhängig davon, welche Seite nach „static“ kommt (die Seite existiert möglicherweise nicht). Anschließend erfolgt ggf. ein Sprung zur Website www.abc.com. 4.# Findet alle Adressen, die mit /documents/ beginnen. Nach dem Abgleich wird die Suche fortgesetzt # Diese Regel wird nur angewendet, wenn der folgende reguläre Ausdruck nicht zutrifft Ort ~ /documents/Abc { [ Konfiguration CC ] } 5.# 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. Standort ^~ /images/ { [ Konfiguration D ] } 6.# Alle Anfragen abgleichen, die mit gif, jpg oder jpeg enden # Allerdings werden alle Anfragen für Bilder unter /images/ von Konfiguration D verarbeitet, da ^~ diesen regulären Ausdruck nicht erreichen kann Standort ~* \.(gif|jpg|jpeg)$ { [ Konfiguration E ] } Beispiel: 7. Das Zeichen # entspricht /images/. Wenn Sie weiter nach unten gehen, werden Sie feststellen, dass ^~ vorhanden ist. Standort /Bilder/ { [ Konfiguration F ] } 8.# Das längste Zeichen entspricht /images/abc. Gehen Sie weiter nach unten und Sie werden feststellen, dass ^~ existiert # Die Reihenfolge der Platzierung von F und G spielt keine Rolle Standort /images/abc { [ Konfiguration G ] } 9.# Erst wenn Konfiguration D entfernt wird, wird es wirksam: Zuerst die Adresse abgleichen, die am längsten mit Konfiguration G beginnt, weiter nach unten suchen und diesen regulären Ausdruck abgleichen, verwenden Standort ~ /images/abc/ { [ Konfiguration H ] } Reihenfolge ohne Priorität: (Standort =) > (Standort vollständiger Pfad) > (Standort ^~ Pfad) > (Standort ~,~* reguläre Sequenz) > (Standort teilweiser Startpfad) > (/) Die obigen Übereinstimmungsergebnisse: Gemäß der obigen Standortbeschreibung ergeben sich folgende Übereinstimmungsbeispiele: / -> Konfiguration A Genaue Übereinstimmung, auch /index.html kann nicht mit /downloads/download.html übereinstimmen -> Konfiguration B Nach dem Abgleichen von B gibt es unten keine Übereinstimmung. Verwenden Sie daher B /images/1.gif -> Konfiguration D Stimmt mit F überein, stimmt mit D überein, stoppt bei /images/abc/def -> Konfiguration D Die längste Übereinstimmung ist G, dann geht es runter zu D und hört auf. Sie können sehen, dass alles, was mit /images/ beginnt, mit D übereinstimmt und aufhört. FG ist hier bedeutungslos und H wird nie an die Reihe kommen. Dies dient nur zur Veranschaulichung der Übereinstimmungsreihenfolge /documents/document.html -> config 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. 3. 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/ } http://tengine.taobao.org/book/chapter_02.html http://nginx.org/en/docs/http/ngx_http_rewrite_module.html 2. Zusammenfassung der Rewrite-Nutzung 1. Definition von Umschreiben 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 eine URL-Umschreibung und -Umleitung zu erreichen. Das Umschreiben kann nur in Server{}, Location{} und If{} erfolgen und kann nur mit der Zeichenfolge nach dem Domänennamen ohne Berücksichtigung der übergebenen Parameter erfolgen. Beispielsweise wird mit http://seanlook.com/a/we/index.php?id=1&u=str nur /a/we/index.php umgeschrieben. 2. Syntax von rewirte Regex-Ersetzung neu schreiben [Flag]; 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. Aus dem Obigen ist ersichtlich, dass sich die Umschreib- und Lokalisierungsfunktionen einigermaßen ähneln und beide Sprünge erzielen können. Der Hauptunterschied besteht darin, dass beim Umschreiben der Pfad geändert wird, um Ressourcen innerhalb desselben Domänennamens abzurufen, während beim Standort der Zugriff gesteuert wird oder ein Reverse-Proxy für eine Pfadklasse ausgeführt wird, der per Proxy an andere Maschinen weitergegeben werden kann. In vielen Fällen wird auch das Umschreiben an einem bestimmten Ort durchgeführt. Die Reihenfolge ihrer Ausführung ist: 1 Führen Sie die Umschreibeanweisung des Serverblocks aus 2. Standortabgleich durchführen 3 Führen Sie den Umschreibbefehl 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. 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:
3. Schreiben Sie häufig verwendete reguläre Ausdrücke neu.
Auf den zwischen den Klammern () stehenden Inhalt kann später durch $1 verwiesen werden, und $2 stellt den Inhalt im zweiten () dar. Was bei regulären Ausdrücken verwirrend ist, ist das \-Escape-Sonderzeichen. 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. if-Anweisung und globale Variablen if-Urteilsanweisungssyntax wenn (Bedingung) Beurteilen Sie den gegebenen Zustand. Wenn wahr, werden die Umschreibeanweisungen in den geschweiften Klammern ausgeführt. Die if-Bedingung kann eine der folgenden sein: 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. Beispiel: Wenn das Benutzergerät ein IE-Browser ist, leiten Sie um, 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.comwww.leizhenfang.com; wenn ($ungültiger_Referrer) { Rückgabe 404; } //Anti-Hotlinking} Globale Variablen Die folgenden globalen Variablen können als Urteile verwendet werden
Beispiel: http://localhost:88/test1/test2/test.php $host:localhost $server_port:88 $request_uri: http://localhost:88/test1/test2/test.php $document_uri:/test1/test2/test.php $document_root:/var/www/html $request_filename: /var/www/html/test1/test2/test.php 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:
|
<<: Implementierung der Breakpoint-Wiederaufnahme in Node.js
>>: Warum wird deine Like-Aussage nicht indexiert?
Installation der Msyql-Datenbank. Zu Ihrer Inform...
Der größte Engpass bei der Verwendung von Zabbix ...
Heute habe ich gelernt, MySQL zu installieren. Da...
zählen(*) erreichen 1. MyISAM: Speichert die Gesa...
Vorwort In diesem Artikel wird erläutert, wie Sie...
Installieren Sie Docker im Linux-System neu und g...
Als ich mir selbst die Webentwicklung beibrachte,...
In der Vergangenheit wurde Float häufig für das L...
1. Aufgetretene Probleme Bei der verteilten Proje...
Es gibt drei Typen von regulären Matching-Selekto...
Verstehen von object.defineProperty, um Reaktions...
1. Übersicht mysql-monitor MySQL-Überwachungstool...
Auf der mobilen Seite ist das Flex-Layout sehr nü...
Inhaltsverzeichnis 1. Konstrukteure und Prototype...
Inhaltsverzeichnis 1. Standardwerte für Funktions...