Verstehen Sie den Unterschied zwischen den Root- und Alias-Direktiven in Nginx

Verstehen Sie den Unterschied zwischen den Root- und Alias-Direktiven in Nginx

Nginx ist ein Webserver, der als Reverse-Proxy-Server, Lastenausgleicher oder HTTP-Cache eingesetzt werden kann.

Eine der wichtigsten Aufgaben bei der Konfiguration von Nginx zum Proxying von HTTP-/HTTPS-Traffic besteht darin, Nginx mitzuteilen, wo es nach den Dateien suchen soll, die es für die Bedienung der HTTP-/HTTPS-Anfragen benötigt.

Wo können wir die Root-Direktive verwenden?

Die Root-Direktive wird in der Regel in Server- und Location-Blöcken platziert. Wenn eine Root-Direktive im Server-Block platziert wird, ist sie in allen Location-Blöcken innerhalb desselben Server-Blocks verfügbar.

Ein Nginx-Konfigurationsbeispiel zur Veranschaulichung der Anwendung der Root-Direktive

Die folgenden Konfigurationen sollen veranschaulichen, wie die Root-Direktive angewendet wird:

server {
    server_name example.com;
    listen 80;
    index index.html;
    root /var/www/example.com;

    location / {
        try_files $uri $uri/ =404;
    }

    location ^~ /images {
        root /var/www/static;
        try_files $uri $uri/ =404;
    }
}

In der obigen Konfiguration sucht Nginx im Verzeichnis /var/www/static des Servers nach Dateien, um HTTP-Anfragen unter http://example.com/images/logo.png oder http://example.com/images/funny-monkey.jpg zu bedienen.

Nginx sucht im Verzeichnis /var/www/example.com nach Dateien, um HTTP-Anfragen unter http://example.com/contact.html oder http://example.com/about/us.html zu bedienen.

Was sagt die Root-Direktive Nginx?

Die Root-Direktive sagt Nginx, die Anforderungs-URL zu nehmen und sie hinter das angegebene Verzeichnis anzufügen.

Zum Beispiel wird mit dem folgenden Konfigurationsblock:

server {
    server_name example.com;
    listen 80;
    index index.html;
    root /var/www/example.com;

    location / {
        try_files $uri $uri/ =404;
    }

    location ^~ /images {
        root /var/www/static;
        try_files $uri $uri/ =404;
    }
}

Nginx die Anfrage wie folgt zuordnen:

  • http://example.com/images/logo.png wird auf den Dateipfad /var/www/static/images/logo.png abgebildet.
  • http://example.com/contact.html wird auf den Dateipfad /var/www/example.com/contact.html abgebildet.
  • http://example.com/about/us.html wird auf den Dateipfad /var/www/example.com/about/us.html abgebildet.
LESEN  Die Vor- und Nachteile des Diesel-Chiptunings im Überblick

Wo können wir die Alias-Direktive verwenden?

Die Alias-Direktive kann nur in einem Location-Block platziert werden.

Wenn eine Alias-Direktive in einem Location-Block platziert wird, wird sie über die Root- oder Alias-Direktive, die auf einer höheren Ebene angewendet wurde, hinweggesetzt.

Ein Konfigurationsbeispiel zur Veranschaulichung der Anwendung der Alias-Direktive

Die folgende Konfiguration soll veranschaulichen, wie die Alias-Direktive angewendet wird:

server {
    server_name example.com;
    listen 80;
    index index.html;
    root /var/www/example.com;

    location / {
        try_files $uri $uri/ =404;
    }

    location ^~ /images {
        alias /var/www/static;
        try_files $uri $uri/ =404;
    }
}

In der obigen Konfiguration sucht Nginx im Verzeichnis /var/www/static des Servers nach Dateien, um HTTP-Anfragen unter http://example.com/images/logo.png oder http://example.com/images/funny-monkey.jpg zu bedienen.

Nginx sucht im Verzeichnis /var/www/example.com nach Dateien, um HTTP-Anfragen unter http://example.com/contact.html oder http://example.com/about/us.html zu bedienen.

Beachten Sie, dass der “location /” Block die Root-Direktive übernimmt, da er keinen Root- oder Alias-Direktive innerhalb des Blocks enthält.

Die “location ^~ /images” verwendet die Alias-Direktive und setzt die Root-Direktive außer Kraft.

Was sagt die Alias-Direktive Nginx?

Die Alias-Direktive sagt Nginx, den Inhalt des Location-Blocks durch den Pfad zu ersetzen, der von der Alias-Direktive angegeben wurde.

Zum Beispiel wird mit dem folgenden Konfigurationsblock:

server {
    server_name example.com;
    listen 80;
    index index.html;
    root /var/www/example.com;

    location / {
        try_files $uri $uri/ =404;
    }

    location ^~ /images {
        alias /var/www/static;
        try_files $uri $uri/ =404;
    }
}

Nginx die Anfrage wie folgt zuordnen:

  • http://example.com/images/logo.png wird auf den Dateipfad /var/www/static/logo.png abgebildet.
  • http://example.com/images/third-party/facebook-logo.png wird auf den Dateipfad /var/www/static/third-party/facebook-logo.png abgebildet.
  • http://example.com/contact.html wird auf den Dateipfad /var/www/example.com/contact.html abgebildet.
  • http://example.com/about/us.html wird auf den Dateipfad /var/www/example.com/about/us.html abgebildet.

Verwendung der Root-Direktive über der Alias-Direktive

Die Nginx-Dokumentation zur Alias-Direktive legt nahe, dass es besser ist, Root anstelle von Alias zu verwenden, wenn der Location-Block mit dem letzten Teil des Wertes der Direktive übereinstimmt.

LESEN  Google Play: So kannst du dein Guthaben nutzen!

Wenn Sie beispielsweise eine Alias-Direktive für einen Location-Block wie folgt definieren möchten:

location /images/ {
    alias /data/w3/images/;
}

Sollten Sie in Betracht ziehen, eine Root-Direktive für diesen Location-Block zu definieren:

location /images/ {
    root /data/w3;
}

Verwendung der Alias-Direktive über der Root-Direktive

Wir verwenden die Alias-Direktive, wenn Anfragen, die für mehrere URLs gestellt werden, von Dateien bedient werden sollen, die sich im selben Verzeichnis auf dem Dateisystem des Servers befinden.

Wenn beispielsweise Anfragen für /images/* und /css/* von Dateien bedient werden sollen, die sich im Verzeichnis /var/www/static befinden, können wir die folgende Konfiguration verwenden:

location ^~ /images {
    alias /var/www/static;
    try_files $uri $uri/ =404;
}

location ^~ /css {
    alias /var/www/static;
    try_files $uri $uri/ =404;
}

Jetzt können wir loslegen und unsere Nginx-Konfiguration mit den Root- und Alias-Direktiven anpassen!

Susanne Müller