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.
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.
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