Konfiguration von Nginx als Reverse-Proxy für Backend-Anwendungen | INTROSERV
EUR
european

EUR

usa

USD

German De
Ex. VAT Ex. VAT 0%

Konfiguration von Nginx als Reverse-Proxy für Backend-Anwendungen

Einführung

In modernen Server-Setups kommunizieren Anwendungen selten direkt mit dem Internet. Stattdessen sitzt ein Reverse-Proxy vor ihnen und bearbeitet eingehende Client-Anfragen. Nginx ist eines der beliebtesten Tools für diese Aufgabe, da es schnell, zuverlässig und einfach zu konfigurieren ist. In diesem Tutorial lernen Sie, wie Sie Nginx als Reverse-Proxy für eine Backend-Anwendung konfigurieren, die auf demselben Server läuft.

Was ist ein Reverse-Proxy?

Ein Reverse-Proxy ist ein Server, der:

  • Anfragen von Clients (Browsern, APIs usw.) entgegennimmt
  • Diese Anfragen an eine Backend-Anwendung weiterleitet
  • Die Antwort des Backends an den Client zurücksendet

Der Client kommuniziert nie direkt mit der Backend-Anwendung.

Reverse-Proxy vs. direkter Zugriff

Ohne einen Reverse-Proxy:

Client ---> Backend-Anwendung (Port 3000)

Mit einem Reverse-Proxy:

Client ---> Nginx (Port 80, 443) ---> Backend-Anwendung (Port 3000)

Warum Nginx als Reverse-Proxy verwenden?

Die Verwendung von Nginx vor Ihrer Anwendung ermöglicht Ihnen:

  • Nur die Ports 80/443 dem Internet auszusetzen
  • Backend-Dienste vor direktem Zugriff zu verbergen
  • HTTPS (TLS) an einem Ort zu beenden
  • Protokollierung, Zugriffskontrolle und Ratenbegrenzung hinzuzufügen
  • Mehrere Anwendungen auf einem Server auszuführen

Für Systemadministratoren bedeutet dies bessere Sicherheit und einfachere Verwaltung.

Szenario, das in diesem Tutorial verwendet wird

Um die Dinge einfach zu halten, verwenden wir das folgende Setup:

  • Nginx hört auf Port 80
  • Die Backend-Anwendung hört auf 127.0.0.1:3000
  • Anfragen an http://example.com werden an das Backend weitergeleitet

Diagramm des Datenflusses

[ Browser ] | v [ Nginx example.com:80,443 ] | v [ Backend-App 127.0.0.1:3000 ]

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:

  • Einen Linux-Server mit dem neuesten stabilen Debian
  • Root- oder Sudo-Zugriff
  • Eine bereits laufende Backend-Anwendung (zum Beispiel eine Node.js-, Python- oder Java-App)
  • Grundlegende Vertrautheit mit dem Linux-Terminal

Nginx installieren

Aktualisieren Sie die Paketlisten und installieren Sie Nginx und curl (zum Testen der Einrichtung):

sudo apt update

sudo apt install nginx curl

Überprüfen Sie, ob Nginx läuft:

systemctl status nginx

Sie sollten "active (running)" in der Ausgabe sehen.

Testen Sie Nginx lokal:

curl http://localhost

Wenn Nginx funktioniert, erhalten Sie die Standard-Willkommensseite.

Die Nginx-Konfigurationsstruktur verstehen

Nginx-Konfigurationsdateien werden normalerweise in /etc/nginx/ gespeichert. Wichtige Verzeichnisse:

  • /etc/nginx/nginx.conf — Hauptkonfigurationsdatei
  • /etc/nginx/sites-available/ — Site-Konfigurationsdateien (nicht aktiv)
  • /etc/nginx/sites-enabled/ — aktivierte Site-Konfigurationen (symbolische Links)

Nginx liest Konfigurationsdateien aus dem Ordner sites-enabled, nicht direkt aus sites-available. Es wird empfohlen, Site-Konfigurationsdateien in sites-available zu erstellen und dann symbolische Links zu ihnen in sites-enabled zu erstellen.

Eine Reverse-Proxy-Konfiguration erstellen

Eine neue Site-Datei erstellen

sudo nano /etc/nginx/sites-available/reverse-proxy.conf

Die Reverse-Proxy-Konfiguration hinzufügen

server { listen 80; server_name 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; } }

Die Konfiguration verstehen

Server-Block

server { listen 80; server_name example.com; }

  • listen 80; — Nginx hört auf HTTP-Verkehr auf Port 80
  • server_name example.com; — Domainname, auf den dieser Server-Block reagiert

Location-Block

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; }

  • location / — passt auf alle eingehenden URLs
  • proxy_pass — leitet Anfragen an die Backend-Anwendung weiter

Proxy-Header

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;

Diese Header stellen sicher, dass das Backend weiß:

  • Den ursprünglichen Domainnamen
  • Die echte IP-Adresse des Clients
  • Ob die Anfrage HTTP oder HTTPS war

Ohne diese Header könnten Backend-Anwendungen falsche Client-Informationen protokollieren.

Die Konfiguration aktivieren

Deaktivieren Sie die Standard-Nginx-Site, um Konflikte auf Port 80 zu vermeiden:

sudo rm /etc/nginx/sites-enabled/default

Erstellen Sie einen symbolischen Link, um die Site zu aktivieren:

sudo ln -s /etc/nginx/sites-available/reverse-proxy.conf /etc/nginx/sites-enabled/

Testen Sie die Konfiguration auf Syntaxfehler:

sudo nginx -t

Wenn der Test erfolgreich ist, laden Sie Nginx neu:

sudo systemctl reload nginx

Den Reverse-Proxy testen

Testen Sie vom Server aus:

curl http://example.com

Öffnen Sie http://example.com in einem Browser, um zu testen. Sie sollten eine Antwort von Ihrer Backend-Anwendung erhalten, nicht von der Standardseite von Nginx. Wenn alles korrekt konfiguriert ist, wird die Backend-Anwendung geladen.

Wie die Anfrage verarbeitet wird

  1. Der Client sendet eine Anfrage an example.com
  2. Nginx empfängt die Anfrage auf Port 80
  3. Nginx leitet die Anfrage an 127.0.0.1:3000 weiter
  4. Das Backend verarbeitet die Anfrage
  5. Die Antwort geht zurück über Nginx
  6. Der Client erhält die Antwort

Häufige Fehler und Fehlerbehebung

Backend läuft nicht

  • Stellen Sie sicher, dass die Anwendung läuft
  • Bestätigen Sie den richtigen Port

ss -tuln | grep 3000

Falsche proxy_pass-Adresse

  • Immer http:// einschließen
  • Stellen Sie sicher, dass die IP und der Port korrekt sind

Vergessen, Nginx neu zu laden

Nach jeder Konfigurationsänderung:

sudo systemctl reload nginx

Firewall blockiert den Zugriff

Stellen Sie sicher, dass Port 80 geöffnet ist:

sudo ufw allow 80

Optionale Verbesserungen

Sobald der Reverse-Proxy funktioniert, sollten Sie in Betracht ziehen:

  • HTTPS mit Let's Encrypt zu aktivieren
  • Mehrere Backend-Anwendungen auszuführen
  • Zugriffsprotokolle und Fehlerprotokolle hinzuzufügen
  • Lastverteilung zu konfigurieren
  • WebSocket-Verbindungen zu unterstützen

HTTPS-Konfiguration

In Produktionsumgebungen sollten Sie immer HTTPS anstelle von HTTP verwenden. HTTPS verschlüsselt den Datenverkehr zwischen dem Client und Ihrem Server und schützt Passwörter, API-Tokens, Cookies und andere sensible Daten. Nginx unterstützt HTTPS mit SSL/TLS-Zertifikaten. In diesem Abschnitt lernen Sie:

  • Was Certbot ist
  • Wie man Certbot installiert
  • Wie Certbot die Nginx-Konfiguration automatisch ändert
  • Wie man Nginx manuell mit einem gekauften Zertifikat konfiguriert

Was ist Certbot?

Certbot ist ein Tool, das automatisch kostenlose SSL/TLS-Zertifikate von Let's Encrypt erhält und installiert. Es kann:

  • Ein kostenloses Zertifikat anfordern
  • Die Domain-Eigentümerschaft verifizieren
  • Nginx automatisch konfigurieren
  • Automatische Zertifikatserneuerung einrichten

Für Anfänger und die meisten Produktionsumgebungen ist Certbot der einfachste und sicherste Weg, um HTTPS zu aktivieren.

Certbot installieren

Aktualisieren Sie die Paketlisten:

sudo apt update

Installieren Sie Certbot und das Nginx-Plugin:

sudo apt install certbot python3-certbot-nginx

Das Paket python3-certbot-nginx ermöglicht es Certbot, Ihre Nginx-Konfiguration automatisch zu ändern.

Ein Zertifikat erhalten und installieren

Bevor Sie Certbot ausführen, stellen Sie sicher:

  • Ihr Domainname zeigt auf die öffentliche IP-Adresse Ihres Servers
  • Nginx läuft
  • Ports 80 und 443 sind in der Firewall geöffnet

Führen Sie aus:

sudo certbot --nginx

Certbot wird:

  1. Fragen, welche Domain Sie sichern möchten
  2. Die Domain-Eigentümerschaft verifizieren
  3. Ihre Nginx-Konfiguration automatisch aktualisieren
  4. Nginx neu laden

Info

Certbot ändert Ihre Nginx-Konfiguration automatisch. Es fügt typischerweise einen neuen Server-Block für Port 443 (HTTPS) hinzu, fügt SSL-Zertifikatspfade hinzu, konfiguriert eine HTTP-zu-HTTPS-Weiterleitung, wenn Sie diese Option wählen, und fügt empfohlene SSL-Einstellungen hinzu.

Beispielkonfiguration, die von Certbot hinzugefügt wurde:

server { listen 443 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 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; } }

Certbot kann auch den HTTP-Block ändern, um den Datenverkehr umzuleiten:

server { listen 80; server_name example.com; return 301 https://$host$request_uri; }

Da Certbot Konfigurationsdateien automatisch bearbeitet, wird empfohlen:

  • Sichern Sie Ihre Konfigurationen
  • Verstehen Sie, welche Änderungen vorgenommen wurden
  • Testen Sie die Konfiguration immer nach Änderungen

Konfiguration testen:

sudo nginx -t

Automatische Zertifikatserneuerung

Let's Encrypt-Zertifikate sind 90 Tage gültig. Certbot installiert automatisch einen Erneuerungstimer. Sie können die Erneuerung mit folgendem Befehl testen:

sudo certbot renew --dry-run

Wenn alles korrekt konfiguriert ist, erfolgt die Erneuerung automatisch ohne Ausfallzeiten.

Verwendung eines gekauften SSL-Zertifikats

Wenn Sie ein SSL-Zertifikat von einer Zertifizierungsstelle (CA) kaufen, müssen Sie Nginx manuell konfigurieren. Nach dem Kauf erhalten Sie normalerweise:

  • Eine Zertifikatsdatei (z.B. example.com.crt)
  • Einen privaten Schlüssel (example.com.key)
  • Eine CA-Bundle-Datei (ca_bundle.crt)

Erstellen Sie ein sicheres Verzeichnis:

sudo mkdir -p /etc/nginx/ssl

sudo chmod 700 /etc/nginx/ssl

Kopieren Sie Ihre Zertifikatsdateien in dieses Verzeichnis.

Beispielkonfiguration für HTTPS mit einem gekauften Zertifikat:

server { listen 443 ssl; server_name example.com www.example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; ssl_trusted_certificate /etc/nginx/ssl/ca_bundle.crt; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; 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; } }

HTTP-zu-HTTPS-Weiterleitung hinzufügen:

server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; }

Nginx nach manueller Konfiguration neu laden:

sudo nginx -t

sudo systemctl reload nginx

Tip

Für unerfahrene Systemadministratoren wird Certbot dringend empfohlen, es sei denn, Ihre Organisation erfordert kommerzielle Zertifikate.

Zusammenfassung

In diesem Tutorial haben Sie gelernt:

  • Was ein Reverse-Proxy ist und warum er nützlich ist
  • Wie Nginx Anfragen an Backend-Anwendungen weiterleitet
  • Wie man eine Reverse-Proxy-Konfiguration erstellt und aktiviert
  • Wie man häufige Probleme testet und behebt
  • Wie man HTTPS konfiguriert

Nginx-Reverse-Proxying ist eine grundlegende Fähigkeit für Systemadministratoren und wird in Produktionsumgebungen häufig eingesetzt.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA