Implementierung von Nginx-Weiterleitungsübereinstimmungsregeln

Implementierung von Nginx-Weiterleitungsübereinstimmungsregeln

1. Regulärer Ausdrucksabgleich

  • ~ für Groß- und Kleinschreibung
  • ~* ist eine Groß-/Kleinschreibung ignorierende Übereinstimmung.
  • Bei !~ und !~* wird zwischen Groß- und Kleinschreibung unterschieden, bei anderen Übereinstimmungen wird zwischen Groß- und Kleinschreibung unterschieden.

2. Datei- und Verzeichnisabgleich

  • Mit -f und !-f wird ermittelt, ob eine Datei existiert
  • Mit -d und !-d wird ermittelt, ob ein Verzeichnis existiert
  • -e und !-e werden verwendet, um zu bestimmen, ob eine Datei oder ein Verzeichnis existiert
  • -x und !-x werden verwendet, um zu bestimmen, ob die Datei ausführbar ist

drei. Der letzte Parameter des Rewrite-Befehls ist das Flag-Tag, das

  • last entspricht dem Flag [L] in Apache, was „umschreiben“ bedeutet.
  • break Nachdem diese Regel abgeglichen wurde, wird der Abgleich beendet und die folgenden Regeln werden nicht mehr abgeglichen.
  • Die Umleitung gibt eine temporäre 302-Umleitung zurück und die Browseradresse zeigt die URL nach dem Sprung an.
  • permanent gibt eine permanente 301-Weiterleitung zurück und die Browseradresse zeigt die URL nach dem Sprung an.

Verwenden Sie „last“ und „break“, um die URI neu zu schreiben, ohne die Adressleiste des Browsers zu ändern.

Es gibt geringfügige Unterschiede zwischen den beiden. Wenn Sie die Alias-Direktive verwenden, müssen Sie den letzten Marker verwenden. Wenn Sie die Proxy_Pass-Direktive verwenden, müssen Sie den Break-Marker verwenden. Nach der Ausführung dieser Umschreiberegel initiiert das letzte Tag erneut eine Anforderung an das Server-Tag {......}, auf dem es sich befindet, und das Break-Tag beendet den Abgleich, nachdem der Abgleich dieser Regel abgeschlossen ist.

Beispiel: Wenn wir URL/photo/123456 auf /path/to/photo/12/1234/123456.png
umleiten /path/to/photo/12/1234/123456.png

umschreiben "/photo/([0-9]{2})([0-9]{2})([0-9]{2})" 
schreibe "/Pfad/zu/Foto/$1/$1$2/$1$2$3.png" neu;

4. Anweisungen zu NginxRewrite-Regeln

1. Unterbrechungsanweisung

Nutzungsumgebung: Server, Standort, wenn
Der Zweck dieser Direktive besteht darin, den aktuellen Regelsatz zu vervollständigen und die Rewrite-Direktive nicht mehr abzuarbeiten.

2. if-Anweisung

Nutzungsumgebung: Server, Standort
Mit dieser Anweisung wird geprüft, ob eine Bedingung erfüllt ist. Wenn die Bedingung erfüllt ist, werden die Anweisungen in den geschweiften Klammern ausgeführt. Die If-Direktive unterstützt keine Verschachtelung und keine mehrfache bedingte &&- und ||-Verarbeitung.

3. Rückgabebelehrung

Syntax: returncode
Nutzungsumgebung: Server, Standort, wenn
Mit dieser Anweisung wird die Ausführung der Regel beendet und ein Statuscode an den Client zurückgegeben.
Beispiel: Wenn die aufgerufene URL mit ".sh" oder ".bash" endet, wird ein 403-Statuscode zurückgegeben

Standort ~ .*\.(sh|bash)?$
{
 Rückgabe 403;
}

4. Direktive umschreiben

Syntax: rewriteregex replacement flag
Nutzungsumgebung: Server, Standort, wenn
Diese Anweisung leitet eine URI basierend auf einem Ausdruck um oder ändert eine Zeichenfolge. Anweisungen werden in der Reihenfolge ausgeführt, in der sie in der Konfigurationsdatei erscheinen. Beachten Sie, dass Umschreibeausdrücke nur mit relativen Pfaden funktionieren. Wenn Sie Hostnamen abgleichen möchten, sollten Sie eine if-Anweisung wie diese verwenden:

wenn( $host ~* www\.(.*) )
{
 setze $host_without_www $1;
 schreibe ^(.*)$ http://$host_without_www$1permanent neu;
}

5. Befehl festlegen

Syntax: Variablenwert festlegen;
Standardwert: keiner
Nutzungsumgebung: Server, Standort, wenn
Mit dieser Anweisung wird eine Variable definiert und der Variablen ein Wert zugewiesen. Der Wert einer Variablen kann Text, eine Variable oder eine Kombination aus Text und Variablen sein.

set$varname "Hallo Welt";

6. Uninitialized_variable_warn-Direktive

Syntax: uninitialized_variable_warnon|off
Nutzungsumgebung: http, Server, Standort, wenn
Mit diesem Befehl können Sie die Warnmeldung bei nicht initialisierten Variablen ein- und ausschalten. Der Standardwert ist „on“.

fünf. Beispiel für das Schreiben von Nginx-Rewrite-Regeln

1. Wenn die aufgerufene Datei oder das aufgerufene Verzeichnis nicht existiert, leiten Sie zu einer HTML-Datei weiter

wenn( !-e $Anforderungsdateiname )
{
 umschreiben ^/(.*)$ index.htmllast;
}

2. Verzeichnistausch /123456/xxxx ====> /xxxx?id=123456

schreibe ^/(\d+)/(.+)/ /$2?id=$1 last neu;

3. Wenn der Client den IE-Browser verwendet, leiten Sie ihn in das Verzeichnis /ie um

wenn( $http_user_agent ~ MSIE)
{
 umschreiben ^(.*)$ /ie/$1 break;
}

4. Zugriff auf mehrere Verzeichnisse verbieten

Standort ~ ^/(cron|templates)/
{
 alles leugnen;
 brechen;
}

5. Verbieten Sie den Zugriff auf Dateien, die mit /data beginnen

Standort ~ ^/Daten
{
 alles leugnen;
}

6. Verbieten Sie den Zugriff auf Dateien mit den Dateierweiterungen .sh, .flv, .mp3

Standort ~ .*\.(sh|flv|mp3)$
{
 Rückgabe 403;
}

7. Legen Sie die Browser-Cache-Zeit für bestimmte Dateitypen fest

Standort ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
 läuft in 30 Tagen ab;
}
Standort ~ .*\.(js|css)$
{
 läuft in 1 Stunde ab;
}

8. Ablaufzeit für favicon.ico und robots.txt festlegen

Hier beträgt die Gültigkeitsdauer für favicon.ico 99 Tage, für robots.txt 7 Tage und es werden keine 404-Fehlerprotokolle aufgezeichnet.

Standort ~(favicon.ico) {
 log_not_found aus;
 läuft in 99 Tagen ab;
 brechen;
}
Standort ~(robots.txt) {
 log_not_found aus;
 läuft am 7. Tag ab;
 brechen;
}

9. Legen Sie die Ablaufzeit einer Datei fest; hier beträgt sie 600 Sekunden, und das Zugriffsprotokoll wird nicht aufgezeichnet

Standort ^~ /html/scripts/loadhead_1.js {
 Zugriff_Abmeldung;
 Stammverzeichnis /opt/lampp/htdocs/web;
 läuft ab 600;
 brechen;
}

10. Anti-Hotlinking von Dateien und Festlegen einer Ablaufzeit

Return412 ist hier ein benutzerdefinierter HTTP-Statuscode. Der Standardwert ist 403, was praktisch ist, um die richtige Hotlink-Anforderung zu finden.

neu schreiben ^/ http: //img.linuxidc.net/leech.gif; //Ein Anti-Leech-Bild anzeigen access_log off; //Keine Zugriffsprotokolle aufzeichnen, um den Druck zu verringern expires 3d //Browser-Cache aller Dateien für 3 Tage location ~*^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
 valid_referers, keine blockiert *.linuxidc.com*.linuxidc.net localhost 208.97.167.194;
wenn ($ungültiger_Referrer) {
  neu schreiben ^/upload/2022/web/leech.gif;
  Rückgabe 412;
  brechen;
}
Zugriff_Abmeldung;
Stammverzeichnis /opt/lampp/htdocs/web;
läuft in 3 Tagen ab;
brechen;
}

11. Erlauben Sie nur festen IP-Adressen den Zugriff auf die Website und fügen Sie ein Passwort hinzu

Stammverzeichnis /opt/htdocs/www;
erlauben Sie 208.97.167.194; 
222.33.1.2 zulassen; 
erlauben Sie 231.152.49.4;
alles leugnen;
auth_basic "C1G_ADMIN";
auth_basic_user_file htpasswd;

12. Konvertieren Sie Dateien in mehreren Verzeichnissen in eine Datei, um den SEO-Effekt zu verbessern

/job-123-456-789.html verweist auf /job/123/456/789.html

umschreiben^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html zuletzt;

13. Umleitung, wenn Dateien und Verzeichnisse nicht vorhanden sind:

wenn (!-e $request_filename) {
 Proxy-Passwort http://127.0.0.1;
}

14. Verweisen Sie einen Ordner im Stammverzeichnis auf das Verzeichnis der zweiten Ebene

Beispielsweise verweist /shanghaijob/ auf /area/shanghai/

Wenn Sie „letzte“ in „permanent“ ändern, wird in der Adressleiste des Browsers /location/shanghai/
angezeigt. /location/shanghai/

umschreiben ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;

Das Problem mit dem obigen Beispiel ist, dass es beim Zugriff auf /shanghai nicht übereinstimmt

umschreiben ^/([0-9a-z]+)job$ /area/$1/ last;
umschreiben ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;

Auf diese Weise kann auch auf /shanghai zugegriffen werden, die relativen Links auf der Seite können jedoch nicht verwendet werden.

Wenn die echte Adresse von ./list_1.html beispielsweise /area/shanghia/list_1.html lautet, wird sie zu /list_1.html und ist somit nicht mehr zugänglich.

Dann füge ich den automatischen Sprung hinzu, aber es funktioniert nicht.

(-d $request_filename) Es gibt die Bedingung, dass es sich um ein echtes Verzeichnis handeln muss, aber bei meiner Umschreibung ist das nicht der Fall, also hat es keine Auswirkung

wenn (-d $Anforderungsdateiname){
schreibe ^/(.*)([^/])$ http://$host/$1$2/permanent um;
}

Wenn man den Grund kennt, ist es leicht zu handhaben. Lassen Sie mich manuell springen.

umschreiben ^/([0-9a-z]+)job$ /$1job/permanent;
umschreiben ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;

15. Domänensprung

Server{
 hören Sie 80;
 Servername jump.linuxidc.com;
 index.html index.htm index.php;
 Wurzel /opt/lampp/htdocs/www;
 neu schreiben ^/ http://www.linuxidc.com/;
 Zugriff_Abmeldung;
}

16. Multi-Domain-Weiterleitung

Servername www.linuxidc.comwww.linuxidc.net;
index.html index.htm index.php;
Wurzel /opt/lampp/htdocs;
wenn ($host ~ "linuxidc\.net") {
 neu schreiben ^(.*) http://www.linuxidc.com$1permanent;
}

6. Globale Variablen von nginx

arg_PARAMETER #Diese Variable enthält den Wert der Variablen PARAMETER in der GET-Anfrage, sofern vorhanden.
args #Diese Variable ist gleich den Parametern in der Anforderungszeile (GET-Anforderung), wie zum Beispiel: foo=123&bar=blahblah;
binary_remote_addr #Binäre Clientadresse.
body_bytes_sent #Die Anzahl der als Antwort gesendeten Body-Bytes. Diese Daten sind auch dann korrekt, wenn die Verbindung verloren geht.
content_length #Inhaltslängenfeld im Anforderungsheader.
content_type #Content-Type-Feld im Anforderungsheader.
cookie_COOKIE #Der Wert der Cookie-Variable COOKIE document_root #Der in der Root-Direktive der aktuellen Anfrage angegebene Wert.
document_uri #Dasselbe wie uri.
Host #Anforderungshost-Headerfeld, andernfalls der Servername.
Hostname #Auf den Hostnamen der Maschine einstellen, wie von gethostname zurückgegeben
http_HEADER
is_args #Wenn ein args-Parameter vorhanden ist, ist diese Variable gleich "?", andernfalls ist sie gleich "", einem leeren Wert.
http_user_agent #Client-Agent-Informationen http_cookie #Client-Cookie-Informationen limit_rate #Diese Variable kann die Verbindungsrate begrenzen.
query_string #Gleich wie args.
request_body_file #Der temporäre Dateiname der Client-Anforderungstextinformationen.
request_method #Die vom Client angeforderte Aktion, normalerweise GET oder POST.
remote_addr #Client-IP-Adresse.
remote_port #Client-Port.
remote_user #Der Benutzername, der vom Auth Basic-Modul verifiziert wurde.
request_completion #Wenn die Anfrage abgeschlossen ist, auf OK setzen. Wenn die Anfrage nicht abgeschlossen ist oder wenn die Anfrage nicht die letzte in der Anfragekette ist, ist es leer.
request_method #GET oder POST
request_filename #Der Dateipfad der aktuellen Anfrage, generiert durch die Root- oder Alias-Direktive und die URI-Anfrage.
request_uri #Die ursprüngliche URI mit den Anforderungsparametern ohne den Hostnamen, z. B.: „/foo/bar.php?arg=baz“. Kann nicht geändert werden.
Schema #HTTP-Methode (wie http, https).
server_protocol #Das in der Anfrage verwendete Protokoll, normalerweise HTTP/1.0 oder HTTP/1.1.
server_addr #Serveradresse. Dieser Wert kann nach Abschluss eines Systemaufrufs ermittelt werden.
server_name #Servername.
server_port #Die Portnummer, über die die Anfrage beim Server eintrifft.

7. Korrespondenz zwischen Apache- und Nginx-Regeln

Apaches RewriteCond entspricht Nginx' if
Apaches RewriteRule entspricht Nginx's Rewrite
Apaches [R] entspricht der Weiterleitung von Nginx
Apaches [P] entspricht Nginx' letztem
Apaches [R,L] entspricht der Weiterleitung von Nginx
Apaches [P,L] entspricht Nginx' letztem
Apaches [PT,L] entspricht Nginx' letztem

Beispiel: Erlauben Sie dem angegebenen Domänennamen den Zugriff auf diese Site, und alle anderen Domänennamen werden auf www.jb51.net umgeleitet.

Apache:

RewriteCond %{HTTP_HOST} !^(.*?)\.aaa\.com$[NC]
RewriteCond %{HTTP_HOST} !^localhost$ 
RewriteCond %{HTTP_HOST}!^192\.168\.0\.(.*?)$
RewriteRule ^/(.*)$ //www.jb51.net[R,L]

Nginx-Filterbeispiel:

wenn( $host ~* ^(.*)\.aaa\.com$ )
{
 setze $allowHost auf „1“;
}
wenn( $host ~* ^localhost )
{
 setze $allowHost auf „1“;
}
wenn( $host ~* ^192\.168\.1\.(.*?)$ )
{
 setze $allowHost auf „1“;
}
wenn( $allowHost !~ '1' )
{
 umschreiben ^/(.*)$ //www.jb51.netredirect ;
}

Zusammenfassen

Backend-Entwicklung ist ein Beruf, der einem Full-Stack-Job am nächsten kommt. Wenn das Frontend nicht ausreicht, kann das Backend Seiten-JS darüber schreiben. Es spielt keine Rolle, ob Betrieb und Wartung erforderlich sind, das Backend kümmert sich um die Wartung des Servers. Kurz gesagt, ein gutes Backend ist in der Lage, alle Aspekte abzudecken.

Dies ist das Ende dieses Artikels über die Implementierung von Nginx-Weiterleitungsabgleichsregeln. Weitere relevante Nginx-Weiterleitungsabgleichsregeln finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Nginx-Standortabgleichsregeln
  • Beispiel für die reguläre Umschreibmethode für Nginx Rewrite (Matching)
  • Detaillierte Zusammenfassung der URI-Übereinstimmungsregeln der Nginx Location-Direktive
  • Beispiel einer Nginx-Standortübereinstimmungsregel
  • So erfüllen Sie mit Nginx mehrere Bedingungen
  • Eine kurze Zusammenfassung der Nginx-Übereinstimmungsregeln (empfohlen)
  • Detaillierte Erläuterung der verschiedenen Matching-Methoden von Nginx

<<:  jQuery implementiert den Fall der Schriftgrößenanpassung

>>:  Detaillierte Schritte zur Installation von MySQL 8.0.18-winx64 unter Win10

Artikel empfehlen

Allgemeine Überlegungen zum Erstellen eines Hadoop 3.2.0-Clusters

Ein Port ändert sich In Version 3.2.0 beträgt der...

Absteigender Index in MySQL 8.0

Vorwort Ich glaube, jeder weiß, dass Indizes geor...

Nginx leitet dynamisch an Upstream weiter, entsprechend dem Pfad in der URL

In Nginx gibt es einige erweiterte Szenarien, in ...

Detaillierte Erläuterung der MySQL-Datenbankisolationsebene und des MVCC

Inhaltsverzeichnis 1. Isolationsstufe LESEN SIE U...

Detaillierte Erläuterung der logischen Architektur von MySQL

1. Gesamtarchitekturdiagramm Im Vergleich zu ande...

So zeigen Sie die Netzwerkroutingtabelle in Ubuntu an

Was sind Routing und Routing-Tabellen in Linux? U...

Die heißesten Trends im Webdesign UI im Jahr 2013 Die beliebtesten UI-Designs

Die Zeit vergeht wie im Flug und in nur sechs Tag...

Designtheorie: Die Grundlagen der Schriftgestaltung

<br />Worte sind das unvermeidliche Produkt ...

Zwei Möglichkeiten, damit IE6 Bilder im PNG-24-Format normal anzeigt

Methode 1: Bitte fügen Sie den folgenden Code nach...

Analyse des Verwendungsbeispiels für den Common Table Expression CTE in mysql8

Dieser Artikel beschreibt anhand eines Beispiels ...