nginx als Reverse Proxy: Anleitung
Auf dieser Seite
Ein Reverse Proxy steht vor deinen Anwendungen und leitet die Anfragen der Besucher an sie weiter. Mit nginx davor wird aus einer Node.js-App, einem Docker-Container oder einem Dashboard auf irgendeinem Port https://app.example.com – mit HTTPS, sauberen Headern und einer zentralen Stelle für die Verwaltung.
Diese Anleitung richtet nginx Schritt für Schritt als Reverse Proxy auf Ubuntu ein: Server-Block, Header, WebSockets, kostenloses HTTPS und die Fehler, denen du am ehesten begegnest.
Was ein Reverse Proxy macht
- Ein öffentlicher Einstiegspunkt. nginx lauscht auf den Ports 80 und 443 und leitet jede Domain oder jeden Pfad an die richtige App weiter, sodass die Apps selbst nie direkt im Internet stehen.
- HTTPS an einer Stelle. nginx kümmert sich um die Zertifikate; die Apps dahinter können auf localhost einfaches HTTP sprechen.
- Mehrere Apps auf einem Server.
app.example.com,api.example.comundexample.com/blogkönnen jeweils zu einem anderen Dienst führen. - Extras: Komprimierung, Caching, Upload-Limits und Zugriffsregeln, ohne die App anzufassen.
Schritt 1: nginx installieren
sudo apt update sudo apt install nginx
Öffne http://your-server-ip, dann solltest du die Willkommensseite von nginx sehen. Wenn du ufw nutzt, erlaube Webverkehr mit sudo ufw allow 'Nginx Full'.
Stelle sicher, dass deine App läuft und auf dem Server selbst erreichbar ist, zum Beispiel mit curl http://127.0.0.1:3000. Schlägt das fehl, scheitert auch nginx.
Betreibe nginx und deine Apps mit vollem Root-Zugriff: HytHost KVM-VPS-Pakete ab €2.92/Monat.
VPS-Pakete ansehenSchritt 2: Den Proxy-Server-Block anlegen
Unter Ubuntu bekommt jede Site eine Datei in /etc/nginx/sites-available/, aktiviert wird sie über einen Link in sites-enabled. Lege /etc/nginx/sites-available/app.example.com an:
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1: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;
}
}
Aktiviere ihn, teste die Konfiguration und lade neu:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Richte den A-Record der Domain auf deinen Server, und http://app.example.com zeigt jetzt deine App. Führe vor jedem Neuladen nginx -t aus: So fallen Tippfehler auf, bevor sie die Site lahmlegen.
Die Header und der abschließende Schrägstrich
Hostübergibt die Domain, die der Besucher aufgerufen hat. Ohne ihn sendet nginx die Adresse ausproxy_pass, und Apps, die Links aus dem Host bauen, funktionieren nicht mehr richtig.X-Real-IPundX-Forwarded-Forübergeben die IP-Adresse des Besuchers. Ohne sie sieht jede Anfrage so aus, als käme sie von127.0.0.1.X-Forwarded-Protosagt der App, ob der Besucher HTTPS genutzt hat, damit sie nicht in einer Schleife umleitet.
Das nginx-Paket von Ubuntu liefert diese Zeilen in /etc/nginx/proxy_params mit, daher ist include proxy_params; eine Abkürzung.
Der abschließende Schrägstrich ist wichtig. Für eine App unter einem Pfad:
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
Mit dem Schrägstrich nach dem Port kommt /app/login bei der App als /login an. Ohne ihn erhält die App den vollständigen Pfad /app/login.
WebSockets
Chat-Apps, Live-Dashboards und viele Admin-Panels nutzen WebSockets, die zwei zusätzliche Header brauchen. Füge diese map einmal im http-Block hinzu, zum Beispiel in einer neuen Datei /etc/nginx/conf.d/websocket.conf:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Dann in der location:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 1h;
nginx schließt eine weitergeleitete Verbindung, über die 60 Sekunden lang nichts kommt; der längere proxy_read_timeout hält ruhige WebSockets offen. proxy_http_version 1.1 ist erst ab nginx 1.29.7 Standard, und Ubuntu 24.04 liefert 1.24 aus – behalte die Zeile also.
Schritt 3: Kostenloses HTTPS mit Certbot
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot sudo certbot --nginx -d app.example.com
Certbot holt ein kostenloses Let's-Encrypt-Zertifikat, ergänzt die HTTPS-Einstellungen in deinem Server-Block und kann HTTP auf HTTPS umleiten. Das Zertifikat wird automatisch erneuert; prüfen kannst du das mit sudo certbot renew --dry-run. Mehr zu Zertifikaten in So bekommst du ein kostenloses SSL-Zertifikat.
Fehler 502, 504 und 413 beheben
| Fehler | Übliche Ursache | Lösung |
|---|---|---|
| 502 Bad Gateway | nginx erreicht die App nicht: Sie ist gestoppt, abgestürzt oder lauscht auf einem anderen Port oder einer anderen Adresse | Starte die App, prüfe den Port mit curl http://127.0.0.1:PORT, lies /var/log/nginx/error.log |
| 504 Gateway Timeout | Die App hat länger als 60 Sekunden für die Antwort gebraucht | Beschleunige die Anfrage oder erhöhe proxy_read_timeout für diese location |
| 413 Request Entity Too Large | Ein Upload ist größer als das Standardlimit von nginx (1 MB) | Setze client_max_body_size 50m; im Server-Block |
| Umleitungsschleife | Die App weiß nicht, dass der Besucher HTTPS genutzt hat | Übergib X-Forwarded-Proto und teile der App mit, dass sie hinter einem Proxy läuft |
Nach jeder Änderung: sudo nginx -t, dann sudo systemctl reload nginx.
Auf einem HytHost VPS betreiben
Ein Reverse Proxy braucht einen Server, auf dem du die Ports 80 und 443 kontrollierst. HytHost VPS-Pakete laufen auf KVM mit vollem Root-Zugriff, SSD-Speicher und DDoS-Schutz; wähle Ubuntu 24.04 und folge den Schritten oben. Deine Apps laufen in Containern? Richte zuerst Docker mit So installierst du Docker auf Ubuntu ein und binde die Ports der Container an 127.0.0.1, damit nur nginx sie erreicht.
Häufige Fragen
Ein Reverse Proxy leitet Anfragen an eine oder mehrere Apps dahinter weiter. Ein Load Balancer ist ein Reverse Proxy, der Anfragen auf mehrere Kopien derselben App verteilt. nginx kann beides, mit einem upstream-Block, der die Kopien auflistet.
nginx erreicht die App dahinter nicht. Prüfe, ob die App läuft und auf der Adresse und dem Port aus proxy_pass lauscht, und lies /var/log/nginx/error.log für den genauen Grund.
Nein, wenn die App auf demselben Server läuft. nginx übernimmt HTTPS für die Besucher und spricht mit der App über einfaches HTTP auf 127.0.0.1, das den Rechner nie verlässt.
Gib jeder App einen eigenen Server-Block mit eigenem server_name, etwa app.example.com und api.example.com, jeweils mit einem proxy_pass auf einen anderen Port.
Ja. Veröffentliche den Port jedes Containers nur auf 127.0.0.1 und richte proxy_pass darauf. So bleiben die Container aus dem öffentlichen Internet heraus – wichtig, weil veröffentlichte Docker-Ports ufw umgehen.
Hoste deine Apps hinter nginx
HytHost KVM-VPS-Pakete mit vollem Root-Zugriff, SSD-Speicher und DDoS-Schutz gibt es ab €2.92/Monat.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursWar diese Anleitung hilfreich?