Beispiele für die Nginx-Location-Direktive
Die Nginx-Location-Direktive ist ein leistungsstarkes Werkzeug zur Steuerung verschiedener Arten von Anfragen. Durch das Definieren von Regeln in Location-Blöcken können Sie gezielte Konfigurationen anwenden, Anfragen an unterschiedliche Bereiche Ihrer Anwendung weiterleiten oder bestimmte Requests vollständig blockieren. Eine effektive Nutzung der Location-Direktive ist entscheidend für Performance, Sicherheit und Funktionalität von Webanwendungen.
Grundsyntax der Nginx-Location-Direktive Link kopieren
Die Location-Direktive wird in der Datei nginx.conf definiert:
location [modifier] uri { ... }
-
modifier – optionaler Parameter zur Definition des Match-Typs (z. B. exakt, Präfix, Regex)
-
uri – die zu vergleichende URI
Innerhalb der geschweiften Klammern können verschiedene Einstellungen gesetzt werden (z. B. proxy_pass, root, index).
Exaktes Matching Link kopieren
Ein exaktes Matching greift nur, wenn die URI vollständig übereinstimmt.
location = /exact-match {
root /var/www/html;
index index.html;
}
Nur Anfragen an /exact-match werden hier verarbeitet.
Sie können zusätzlich Bedingungen mit if verwenden (beachten Sie: Nginx besitzt kein klassisches if-else):
location = /exact-match {
root /var/www/html;
index index.html;
if ($http_user_agent ~* "Chrome") {
add_header X-Browser "Chrome";
}
}
Wird Chrome erkannt, wird ein zusätzlicher Header X-Browser gesetzt.
Präfix-Matching Link kopieren
Dies ist der häufigste Typ und greift bei allen URIs, die mit dem angegebenen Pfad beginnen:
location /prefix {
root /var/www/html;
index index.html;
if ($request_method = POST) {
return 405;
}
}
Alle Anfragen wie /prefix/page1 oder /prefix/page2 landen hier. POST-Requests werden mit 405 Method Not Allowed abgelehnt.
Regex-Matching Link kopieren
Für komplexe Szenarien werden reguläre Ausdrücke verwendet.
Häufige Wildcards:
-
. – beliebiges einzelnes Zeichen
-
.* – beliebige Zeichenfolge
-
^ – Anfang der Zeichenkette
-
$ – Ende der Zeichenkette
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
if ($request_uri ~* "/admin") {
return 403;
}
if ($request_uri !~* "/admin") {
add_header X-Admin "Not Admin";
}
}
Erklärung:
-
~* = Regex ohne Beachtung der Groß-/Kleinschreibung
-
\.php$ matcht alle PHP-Dateien
-
/admin → 403 Forbidden
-
sonst wird X-Admin: Not Admin gesetzt
Case-Insensitive Matching Link kopieren
location ~* \.jpg$ {
root /var/www/images;
if ($http_referer !~* "^https?://(www\.)?example\.com") {
return 403;
}
}
Nur Referer von example.com dürfen Bilder laden.
Priorität der Location-Blöcke Link kopieren
-
Exakt (=) – höchste Priorität
-
Regex (~, ~*) – Reihenfolge zählt
-
Präfix (/) – längstes Präfix gewinnt
Beispiel:
location = /exact { }
location ~* \.jpg$ { }
location / { }
Verschachtelte Location-Blöcke Link kopieren
location /nested {
location /nested/subnested {
root /var/www/html;
}
root /var/www/html;
}
/nested/subnested wird vom inneren Block verarbeitet.
Praxisbeispiel Webserver Link kopieren
server {
listen 80;
server_name localhost;
location / {
root /var/www/html;
index index.html;
}
location = /about {
root /var/www/html;
index about.html;
}
location /api {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ \.php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
location ~* \.(jpg|jpeg|png|gif|ico)$ {
root /var/www/images;
}
location /admin {
root /var/www/admin;
index index.html;
location /admin/stats {
proxy_pass http://localhost:8080/stats;
}
}
}
NGINX neu laden Link kopieren
sudo systemctl reload nginx
Testen & Debugging Link kopieren
Syntax prüfen:
sudo nginx -t
Requests testen:
curl -I http://localhost/about
curl -X POST http://localhost/prefix/form
curl -H "User-Agent: Chrome" http://localhost/exact-match
Logs beobachten:
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
Zugriffsbeschränkung sensibler Bereiche Link kopieren
location /admin {
allow 192.168.1.100;
deny all;
}
Nur diese IP erhält Zugriff.
root vs alias Link kopieren
|
Directive |
Verhalten |
Ergebnis |
|
root |
hängt URI an |
/var/www/static/css/style.css |
|
alias |
ersetzt Pfad |
/var/www/assets/css/style.css |
Alias-Beispiel:
location /files/ {
alias /data/downloads/;
}
Wichtig: bei alias immer mit / enden.
Fazit Link kopieren
Ein tiefes Verständnis der Location-Direktive ist essenziell für sauberes Request-Routing. Exakte Matches, Präfixe und Regex besitzen unterschiedliche Prioritäten und beeinflussen Performance und Verhalten erheblich. Durch verschachtelte Locations lassen sich hochpräzise Regeln definieren. Wer diese Mechanismen beherrscht, baut stabile, sichere und effiziente Nginx-Konfigurationen.