Nginx einrichten und Server-Block konfigurieren
Wir zeigen, wie Sie Nginx unter Ubuntu installieren, einen Server Block für Ihre Domain anlegen, einen Reverse Proxy für eine Node.js-Anwendung einrichten und häufige Fehler beheben.

Für die Nginx-Installation führen Sie sudo apt update und sudo apt install nginx aus und erlauben in der Firewall das Profil Nginx Full. Anschließend legen Sie unter /etc/nginx/sites-available einen Server Block für Ihre Domain an, verknüpfen ihn mit dem Ordner sites-enabled, testen mit sudo nginx -t und übernehmen die Einstellung mit sudo systemctl reload nginx.
Was ist Nginx und wofür braucht man es?
Nginx ist ein quelloffener Webserver und Reverse Proxy, der sehr viele gleichzeitige Verbindungen mit wenig Arbeitsspeicher bewältigt. Er liefert statische Dateien extrem schnell aus, sitzt vor Node.js-, Python- oder PHP-Anwendungen und leitet Anfragen an sie weiter, beendet SSL und dient als Cache-Schicht.
Der Hauptunterschied zu Apache liegt in der Konfiguration: Nginx kennt keine verzeichnisbezogene .htaccess-Datei, alle Regeln stehen in der zentralen Konfiguration. Das steigert die Performance, verlangt von Umsteigern aber, ihre Apache-Regeln neu zu schreiben. Wie das Gegenstück bei Apache aussieht, erfahren Sie in unserem Beitrag zur htaccess-Weiterleitung.
Diese Anleitung arbeitet mit Ubuntu und Debian; die Entwicklungsumgebung für macOS und Windows finden Sie in einem eigenen Abschnitt.
Voraussetzungen
Ist auf dem Server auch Apache installiert, versuchen beide Dienste Port 80 zu belegen, und Nginx startet nicht. Stoppen und deaktivieren Sie Apache oder lassen Sie ihn auf einem anderen Port lauschen.
- Ein Server mit Ubuntu oder Debian und ein Benutzer mit sudo-Rechten
- Der A-Record Ihrer Domain zeigt auf die IP-Adresse des Servers
- Kein anderer Dienst (z. B. Apache), der die Ports 80 und 443 belegt
- Für einen Reverse Proxy eine auf dem Server laufende Anwendung (z. B. Node.js auf Port 3000)
Nginx unter Ubuntu installieren: die Schritte
Das Nginx-Paket aus dem Ubuntu-Repository erhält regelmäßig Sicherheitsupdates und genügt für die meisten Projekte. Brauchen Sie eine neuere Mainline-Version, können Sie das offizielle Paket-Repository auf nginx.org hinzufügen.
sudo apt update
sudo apt install nginx
sudo systemctl enable --now nginx
sudo systemctl status nginx
# Firewall (falls Sie UFW verwenden)
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
# Überprüfung
nginx -v
curl -I http://localhostWichtige Dateien und Ordner
- /etc/nginx/nginx.conf: die Hauptkonfigurationsdatei
- /etc/nginx/sites-available/: definierte Server Blocks
- /etc/nginx/sites-enabled/: Verknüpfungen zu den aktiven Blocks
- /var/www/: üblicher Stammordner für Websitedateien
- /var/log/nginx/access.log und error.log: Anfrage- und Fehlerprotokolle
Wie legt man einen Server Block an?
Ein Server Block entspricht dem virtuellen Host bei Apache und erlaubt es, mehrere Domains auf einem Server zu betreiben. Eine eigene Datei pro Website erleichtert die Verwaltung.
Legen Sie zuerst den Websiteordner an und setzen Sie die Besitzrechte, dann schreiben Sie die Konfigurationsdatei. Tragen Sie in die Zeile server_name sowohl die Domain ohne www als auch die www-Variante ein; Tools wie Certbot lesen diese Zeile, um Zertifikate auszustellen.
sudo mkdir -p /var/www/ornek.com/html
sudo chown -R $USER:$USER /var/www/ornek.com/html
echo '<h1>ornek.com läuft</h1>' > /var/www/ornek.com/html/index.html
sudo nano /etc/nginx/sites-available/ornek.comserver {
listen 80;
listen [::]:80;
server_name ornek.com www.ornek.com;
root /var/www/ornek.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/ornek.com.access.log;
error_log /var/log/nginx/ornek.com.error.log;
}sudo ln -s /etc/nginx/sites-available/ornek.com /etc/nginx/sites-enabled/
# Falls Sie die Standard-Willkommensseite deaktivieren möchten
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginxNginx als Reverse Proxy einrichten
Einen Node.js-, Python- oder anderen Anwendungsserver nicht direkt ins Internet zu stellen, sondern Nginx davorzuschalten, ist ein verbreitetes und sicheres Vorgehen. Nginx lauscht auf den Ports 80 und 443 und leitet Anfragen an die lokal laufende Anwendung weiter; deren eigener Port bleibt nach außen geschlossen.
Im folgenden Beispiel läuft die Anwendung auf Port 3000. Damit die echte Client-IP und das Protokoll bei der Anwendung ankommen, werden Proxy-Header ergänzt; für Anwendungen mit WebSocket sind außerdem Upgrade-Header nötig.
Betreiben Sie mehrere Anwendungen auf demselben Server, ist es am übersichtlichsten, jeder eine eigene Subdomain und einen eigenen Server Block zu geben. Das Admin-Panel kann zum Beispiel unter panel.ornek.com laufen, die API unter api.ornek.com; hat jeder Block eine eigene Logdatei, lässt sich auch leichter finden, aus welcher Anwendung ein Problem stammt. Damit die Anwendung die echte Client-IP lesen kann, aktivieren Sie in Ihrem Framework außerdem die Einstellung für vertrauenswürdige Proxys (trust proxy).
server {
listen 80;
server_name app.ornek.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
client_max_body_size 20m;
}HTTPS, Kompression und Caching
Läuft der Server Block, folgt als Nächstes die Umstellung auf HTTPS mit einem kostenlosen Zertifikat. Das Nginx-Plugin von Certbot holt das Zertifikat und ergänzt den 443-Block samt Weiterleitung für Sie; die Schritte haben wir in der Anleitung zur SSL-Zertifikat-Installation beschrieben.
Für die Geschwindigkeit machen gzip-Kompression und lange Cache-Header für statische Dateien einen großen Unterschied. Auch ein CDN wie Cloudflare vor der Domain liefert statische Inhalte von Standorten nahe beim Besucher aus; die Einrichtung finden Sie in unserem Beitrag zur Cloudflare-Einrichtung.
- Verwenden Sie Versions-Fingerprints in Dateinamen (z. B. app.3f9a.css), können Sie die Cache-Dauer noch weiter verlängern.
- Cachen Sie HTML-Dateien nicht über längere Zeit; sonst erreichen Updates die Besucher verspätet.
gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;
location ~* \.(css|js|webp|avif|png|jpg|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public";
}Grundlegende Sicherheitseinstellungen
Die Standardinstallation funktioniert, doch einige einfache Einstellungen verkleinern die Angriffsfläche vor dem Livegang spürbar. Keine davon erfordert zusätzliche Software; es genügen ein paar Zeilen in der Konfiguration.
Als Erstes schalten Sie server_tokens aus, damit die Nginx-Versionsnummer weder auf Fehlerseiten noch in Headern erscheint. Danach ergänzen Sie einen Standardblock, der Anfragen mit nicht definierten Domains abfängt. So verhindern Sie, dass Bots, die direkt die IP-Adresse Ihres Servers aufrufen, Ihre erste Website zu sehen bekommen.
Ebenso wichtig ist es, den Zugriff auf versteckte Dateien zu sperren. Ein versehentlich im Stammordner liegengebliebener .git-Ordner oder eine .env-Datei kann Ihren Quellcode oder Ihre Datenbankpasswörter für alle offenlegen. Solche Lecks entstehen meist nicht aus böser Absicht, sondern durch einen hastigen Upload.
Halten Sie schließlich die Serverpakete regelmäßig aktuell und lassen Sie nur die Ports offen, die Sie wirklich brauchen. Wer bei einem Webdesign-Projekt oder einer E-Commerce-Infrastruktur diese Checkliste bei jedem Livegang von vorn abarbeitet, vermeidet spätere Überraschungen weitgehend.
# /etc/nginx/nginx.conf, innerhalb des http-Blocks
server_tokens off;
# Standardblock, der nicht definierte Domains ablehnt
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 444;
}
# Innerhalb des Site-Blocks: versteckte Dateien sperren
location ~ /\.(?!well-known) {
deny all;
}Entwicklungsumgebung unter macOS und Windows
Auch wenn der Live-Server meist unter Linux läuft, beschleunigt es Ihre Arbeit, die Konfiguration lokal auszuprobieren. Unter macOS lauscht eine per Homebrew installierte Nginx-Instanz standardmäßig auf Port 8080, und die Konfigurationsdatei liegt im Ordner etc/nginx unterhalb des Homebrew-Präfixes.
Für Windows gibt es zwar einen Build auf nginx.org, doch die offizielle Dokumentation weist auf Einschränkungen dieser Version hin. Am praktischsten ist es unter Windows, die Linux-Version in Docker oder WSL laufen zu lassen; so testen Sie in derselben Umgebung wie auf dem Live-Server.
macOS (Homebrew)
brew install nginx
brew services start nginx
nginx -t
# Konfigurationsordner
ls $(brew --prefix)/etc/nginx
curl -I http://localhost:8080Windows (Docker)
docker run -d --name web -p 8080:80 nginx
curl.exe -I http://localhost:8080Häufige Fehler und Lösungen
Bei der Fehlersuche prüfen Sie zuerst immer mit sudo nginx -t die Syntax und danach die Datei error.log. Die meisten Probleme klären sich mit der einzeiligen Meldung dort.
| Symptom | Mögliche Ursache und Lösung |
|---|---|
| 502 Bad Gateway | Die dahinterliegende Anwendung läuft nicht oder der Port stimmt nicht; prüfen Sie die Anwendung und die Adresse in proxy_pass. |
| 403 Forbidden | Die Ordnerrechte reichen nicht aus oder es fehlt eine Index-Datei; prüfen Sie die Besitzrechte und die index-Zeile. |
| Address already in use | Ein anderer Dienst belegt Port 80; finden Sie ihn mit ss -tlnp und beenden Sie ihn. |
| conflicting server name | Derselbe server_name ist in zwei Blöcken definiert; entfernen Sie das Duplikat. |
| 413 Request Entity Too Large | Die hochgeladene Datei überschreitet das Limit; erhöhen Sie den Wert von client_max_body_size. |
sudo nginx -t
sudo tail -n 50 /var/log/nginx/error.log
sudo ss -tlnp | grep -E ':80|:443'Häufig gestellte Fragen
01Nginx oder Apache – was ist besser?
Beide sind ausgereifte, zuverlässige Server. Nginx punktet bei hohem parallelem Traffic und als Reverse Proxy, Apache bietet dank .htaccess-Unterstützung Flexibilität im Shared Hosting. Viele Infrastrukturen setzen auch beide zusammen ein.
02Was ist der Unterschied zwischen restart und reload?
reload lädt die neue Konfiguration, ohne laufende Verbindungen zu trennen, und sollte bei alltäglichen Änderungen bevorzugt werden. restart stoppt den Dienst vollständig und startet ihn neu, was zu einer kurzen Unterbrechung führen kann.
03Wie viele Websites kann ich auf einem Server betreiben?
Die Grenze setzen nicht Nginx, sondern die Ressourcen des Servers. Mit einem eigenen Server Block pro Domain können Sie viele Websites auf derselben Maschine betreiben; mit wachsendem Traffic sollten Sie Arbeitsspeicher, CPU und Festplattenauslastung im Blick behalten.
04Lässt sich mit Nginx Load Balancing umsetzen?
Ja. Definieren Sie im upstream-Block mehrere Anwendungsserver und leiten Sie per proxy_pass auf diese Gruppe weiter, verteilt Nginx die Anfragen auf die Server. Standard ist die reihum erfolgende Verteilung; mit Methoden wie least_conn oder ip_hash lässt sich das Verhalten ändern.
Ein korrekt aufgesetztes Nginx liefert eine schnelle, sichere Basis, die mehrere Anwendungen tragen kann. Möchten Sie Servereinstellungen, Caching und Core-Web-Vitals-Ziele gemeinsam angehen, schauen Sie sich unsere Speed- und Performance-Optimierung an. Für ein individuelles System auf Ihrem eigenen Server oder fertige Aurora-Lösungen wie die Hotelsoftware erreichen Sie uns über die Kontaktseite.


