Wissensanhäufung im Zusammenhang mit dem Nginx-Standortblock (einschließlich Einführung in häufig verwendete reguläre Matching-Ausdrücke)

Wissensanhäufung im Zusammenhang mit dem Nginx-Standortblock

01-Platz-Blockpriorität

Hinweis: Wenn die Nginx-Konfiguration mehrere Standortblöcke enthält, wird die übereinstimmende Priorität jedes Standortblocks nicht vollständig anhand der Reihenfolge des Codes bestimmt. Stattdessen wird es nach den folgenden Regeln bestimmt:
In Nginx basiert die Zuordnung von location Blöcken auf den folgenden Prinzipien:

  1. Präfixübereinstimmung: location mit einem längeren Präfix wird zuerst abgeglichen. Wenn das Präfix eines location das Präfix eines anderen location ist, wird zuerst das längere Präfix location abgeglichen.

  2. Übereinstimmung mit regulären Ausdrücken: Wenn es eine Übereinstimmung mit regulären Ausdrücken gibt location, dann hat die Übereinstimmung mit regulären Ausdrücken Vorrang vor der Präfixübereinstimmung. Beim Abgleich mit regulären Ausdrücken werden zuerst spezifischere Regeln (die länger sind oder bestimmte Zeichen enthalten) abgeglichen.

Beispielsweise gibt es den folgenden Nginx-Standortkonfigurationscode:

    location / {
    
    
            proxy_pass http://127.0.0.1:55113;
    }
    
    #301 Not Config
    #拒绝访问的文件
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
    
    
        return 404;
    }
    #静态文件
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
    
    
        expires 30d;
        error_log off;
        access_log /dev/null;
    }
    location ~ .*\.(js|css)?$
    {
    
    
        expires 12h;
        error_log off;
        access_log /dev/null;
    }

In dieser Nginx-Konfiguration lautet die Prioritätsreihenfolge der locationBlöcke gemäß den oben genannten Prinzipien

  1. /: Der einfachste Präfixabgleich, der alle Anforderungen abgleicht. Da es sich um die kürzeste Präfixübereinstimmung und nicht um eine reguläre Übereinstimmung handelt, hat sie die niedrigste Priorität.

  2. ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md): Vergleich regulärer Ausdrücke, übereinstimmende Anforderungen für bestimmte Dateipfade.

  3. ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$: Regulärer Ausdrucksabgleich, der statische Dateianforderungen abgleicht, die mit dem angegebenen Suffix enden.

  4. ~ .*\.(js|css)?$: Regulärer Ausdrucksabgleich, der statische Dateianforderungen abgleicht, die mit dem angegebenen Suffix enden.

Das heißt, die Priorität der ersten Übereinstimmung ist am niedrigsten, das heißt, die oben genannten vier Standortblöcke sind in zwei Gruppen unterteilt:
Die erste Gruppe ist die erste und gehört dazu um die Übereinstimmung voranzustellen. ;
Die zweite Gruppe ist die 2., 3. und 4., bei denen es sich allesamt um reguläre Übereinstimmungen handelt.
Wenn eine Anfrage sowohl mit der ersten als auch mit der zweiten Gruppe übereinstimmen kann, wird der Standortblock in der zweiten Gruppe verwendet, da die Priorität der zweiten Gruppe höher ist als die Priorität der ersten Gruppe. Wenn eine Anfrage gleichzeitig mit dem 2., 3. und 4. Standortblock übereinstimmen kann, wird der 2. Standortblock ausgewählt, da er weiter oben in der Konfigurationsdatei erscheint.

02-Gemeinsame reguläre Ausdrücke

In Bezug auf reguläre Ausdrücke habe ich bereits einige Artikel geschrieben. Sie können diese lesen, bevor Sie den folgenden Inhalt lesen.
01-Die Bedeutung der regulären Matching-Ausdrucksoperatoren ~ und ~* in Nginx
02- Was ist der Unterschied zwischen + und * in regulären Ausdrücken?
03-Welche Funktion hat die Methode „compile()“ des Re-Moduls für reguläre Ausdrücke in Python?
04-Was nützen eckige Klammern [] in regulären Ausdrücken?
05-Klammern in regulären Ausdrücken-Wozu dienen geschweifte Klammern {}?
06-Relevante Wissenssammlung und Blog-Beitragszusammenfassung zum Python-Modul für reguläre Ausdrücke – Ich empfehle dringend, diesen Artikel zu lesen!

02-01-~Japanisch~*

~Der -Operator stellt eine Übereinstimmung dar, bei der die Groß-/Kleinschreibung beachtet wird. Der Operator
~* stellt eine Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung dar.

02-02-~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)

~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)

~Der -Operator stellt eine Übereinstimmung dar, bei der die Groß-/Kleinschreibung beachtet wird.
^Der Operator gibt die Anfangsposition der passenden Zeichenfolge an. Weitere Informationen finden Sie unter: Relevante Wissenssammlung und Blog-Beitragszusammenfassung des Python-Moduls für reguläre Ausdrücke Also der gesamte reguläre Ausdruck: soll also mit den tatsächlichen Punkten übereinstimmen. bedeutet Escape, da der Punkt ein Sonderzeichen in regulären Ausdrücken ist, was bedeutet, dass er mit jedem Zeichen übereinstimmt (außer Zeilenumbruchzeichen). beginnen. , dass sie denjenigen entsprechen, die mit einem Schrägstrich ^ und /^//
\\.

~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)

Zeigt an, dass der URL-Pfad mit dem folgenden Präfix übereinstimmt:

/.user.ini
/.htaccess
/.git
/.svn
/.project
/LICENSE
/README.md

Das heißt, der Zugriff auf Dateien oder Verzeichnisse im Stammverzeichnis der Website.user.ini、.htaccess、.git、.svn、.project、LICENSE、README.md ist verboten.
Hinweis: Der URL-Pfad: /.svn/configure.txt wird ebenfalls abgeglichen. Weil das Präfix/.svn/ übereinstimmt.

02-3-~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

Aus:

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
    
    
        expires 30d;
        error_log off;
        access_log /dev/null;
    }
    

~Der -Operator stellt eine Übereinstimmung dar, bei der die Groß-/Kleinschreibung beachtet wird.
.*: . ist ein Sonderzeichen in regulären Ausdrücken, das heißt, es passt zu jedem Zeichen (außer Zeilenumbrüchen). * bedeutet, dass das vorherige Muster null oder mehrmals abgeglichen wird. Das Ganze bedeutet „trifft jedes Zeichen null oder mehrmals zu“.
\.: \ bedeutet Escape, da Punkt ein Sonderzeichen in regulären Ausdrücken ist, was bedeutet, dass es mit jedem Zeichen übereinstimmt (außer Zeilenumbruchzeichen). \. soll also mit den tatsächlichen Punkten übereinstimmen.
$: Zeigt den Abgleich am Ende der Zeichenfolge an.
Der obige reguläre Ausdruck stimmt also mit statischen Bildressourcen überein.

02-04-~ .*\.(js|css)?$

~ .*\.(js|css)?$

Aus:

    location ~ .*\.(js|css)?$
    {
    
    
        expires 12h;
        error_log off;
        access_log /dev/null;
    }

~Der -Operator stellt eine Übereinstimmung dar, bei der die Groß-/Kleinschreibung beachtet wird.
.*: . ist ein Sonderzeichen in regulären Ausdrücken, das heißt, es passt zu jedem Zeichen (außer Zeilenumbrüchen). * bedeutet, dass das vorherige Muster null oder mehrmals abgeglichen wird. Das Ganze bedeutet „trifft jedes Zeichen null oder mehrmals zu“.
\.: \ bedeutet Escape, da Punkt ein Sonderzeichen in regulären Ausdrücken ist, was bedeutet, dass es mit jedem Zeichen übereinstimmt (außer Zeilenumbruchzeichen). \. soll also mit den tatsächlichen Punkten übereinstimmen.
?: Dies bedeutet, dass das vorangehende Zeichen (hier (js|css)) optional ist und null oder einmal vorkommen kann. Hier bedeutet es, dass der Dateiname mit .js oder .css oder ohne beides enden kann.
$: Zeigt den Abgleich am Ende der Zeichenfolge an.

Der obige reguläre Ausdruck stimmt also mit Dateien überein, die mit .js, .css oder . enden, jedoch ohne die Endung bestimmter statischer Ressourcen mit dem Suffixnamen.

03-Häufig verwendete Aussagen

03-1-läuft ab

Beispiel 1:

    location ~ .*\.(js|css)?$
    {
    
    
        expires 12h;
        error_log off;
        access_log /dev/null;
    }

Beispiel 2:

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
    
    
        expires 30d;
        error_log off;
        access_log /dev/null;
    }

expires 12h;: Diese Direktive legt die Ablaufzeit des Inhalts fest. Es weist den Client (Browser) an, die Datei 12 Stunden lang zwischenzuspeichern (12h). Dadurch kann die Website-Leistung verbessert werden, da die Notwendigkeit für Clients verringert wird, dieselben statischen Dateien innerhalb eines bestimmten Zeitraums wiederholt herunterzuladen.

expires 30d;: Diese Direktive legt die Ablaufzeit des Inhalts fest. Es weist den Client (Browser) an, die Datei 30 Tage lang (30d) zwischenzuspeichern. Dadurch kann die Website-Leistung verbessert werden, da die Notwendigkeit für Clients verringert wird, dieselben statischen Dateien innerhalb eines bestimmten Zeitraums wiederholt herunterzuladen.

03-2-error_log aus

Beispiel:

    location ~ .*\.(js|css)?$
    {
    
    
        expires 12h;
        error_log off;
        access_log /dev/null;
    }

error_log off;: Diese Anweisung deaktiviert die Fehlerprotokollierung für Anfragen, die diesem Standort entsprechen. Dies bedeutet, dass Anforderungsfehler im Zusammenhang mit JavaScript- und CSS-Dateien nicht protokolliert werden.

03-3-access_log

Beispiel:

    location ~ .*\.(js|css)?$
    {
    
    
        expires 12h;
        error_log off;
        access_log /dev/null;
    }

access_log /dev/null;: Diese Anweisung setzt den Zugriffsprotokollpfad auf /dev/null und deaktiviert so effektiv die Zugriffsprotokollierung für Anfragen, die diesem Speicherort entsprechen. Das Zugriffsprotokoll zeichnet Informationen zu jeder Anfrage auf. Durch die Weiterleitung an /dev/null verwerfen Sie die detaillierten Zugriffsprotokollinformationen für diese spezifischen Anfragen. Dies kann die Festplatten-E/A reduzieren und die Leistung verbessern, wenn Sie für bestimmte statische Dateien keine detaillierten Zugriffsprotokolle erstellen müssen.

Guess you like

Origin blog.csdn.net/wenhao_ir/article/details/134645554