Nginx Grundkonfiguration

Aus Xinux Wiki
Version vom 31. Oktober 2026, 15:16 Uhr von Thomas.will@claude (Diskussion | Beiträge) (Neue Seite: fehlte, war aber schon von drei Seiten verlinkt)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Einstieg in Nginx: Installation, Verzeichnisstruktur, der erste Server-Block und wie man Änderungen übernimmt, ohne den Dienst lahmzulegen. Vertiefung in Nginx Reverse Proxy und Load Balancing. Dazu die Animation Nginx: Grundkonfiguration (einfach).

Installation

# Debian/Ubuntu
sudo apt install nginx

# Rocky/RHEL (ggf. vorher epel-release)
sudo dnf install nginx
sudo systemctl enable --now nginx
sudo systemctl status nginx

Erster Verdacht bei "geht nicht von außen": Nginx läuft und antwortet lokal, trotzdem kommt von einem anderen Rechner nichts an – meist blockiert die lokale Firewall (ufw, firewalld) Port 80/443, nicht Nginx selbst.

Verzeichnisstruktur

Pfad Zweck
/etc/nginx/nginx.conf Hauptkonfiguration, lädt die anderen Dateien per include
/etc/nginx/conf.d/*.conf bzw. sites-available/sites-enabled eingebundene Server-Blöcke – sites-* nur bei Debian/Ubuntu üblich, bei Rocky/RHEL meist direkt conf.d
/var/www/html Standard-Webroot, per root frei änderbar
/var/log/nginx/access.log, error.log erster Blick bei jeder Störung

sudo nginx -T gibt die komplette, tatsächlich geladene Konfiguration aus.

Der erste Server-Block

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

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

try_files $uri $uri/ =404; prüft erst die Datei, dann das Verzeichnis, sonst eine 404-Antwort. Fehlt die Index-Datei und ist kein passender location-Block da, antwortet Nginx mit 403 Forbidden (kein Directory Listing erlaubt) oder 404 – nicht mit einer Meldung über die fehlende Datei selbst.

Sicher ändern

sudo nginx -t && sudo systemctl reload nginx

nginx -t prüft nur die Syntax, ohne etwas zu verändern. systemctl reload übernimmt eine gültige Konfiguration ohne Verbindungsabbruch – anders als restart, der den Dienst kurz komplett beendet: Bei einem Tippfehler in der Konfiguration kommt er danach nicht mehr hoch, und die Seite ist für alle weg. Das && sorgt dafür, dass bei einem Syntaxfehler gar nicht erst neu geladen wird.

Mehrere Sites

Mehrere server-Blöcke können denselben Port teilen. server_name entscheidet anhand des Host-Headers, welcher Block zuständig ist – nicht die Reihenfolge im Config.

server {
    listen 80;
    server_name a.example.com;
    root /srv/a;
}
server {
    listen 80;
    server_name b.example.com;
    root /srv/b;
}

Wichtig: server_name erzeugt keinen DNS-Eintrag. Ohne passenden DNS-Eintrag, der auf diesen Server zeigt, landet eine Anfrage nie hier. listen 80 default_server; fängt alle Anfragen ohne passenden server_name auf.

Fehlerbilder

Symptom Ursache Erster Schritt
Seite lädt gar nicht Dienst nicht gestartet oder Firewall blockiert Port systemctl status nginx, dann Firewall-Regeln prüfen
403 Forbidden Dateirechte oder kein Index, kein Directory Listing erlaubt Rechte und Vorhandensein der Index-Datei prüfen
404 Not Found falscher root oder Datei liegt woanders root im richtigen server-Block prüfen
Dienst nach Änderung ganz weg restart statt reload bei fehlerhafter Konfiguration vor jedem Reload: nginx -t
Änderung an sites-available wirkt nicht Symlink in sites-enabled fehlt (Debian-Familie) ln -s ../sites-available/datei sites-enabled/datei

Links