Introducing ZYNOO General Purpose & CPU Optimized Servers   Learn More >

So richten Sie einen Nginx-Reverse-Proxy unter Ubuntu ein

Ein Nginx-Reverse-Proxy empfängt Anfragen von Website-Besuchern und leitet sie an einen anderen Server oder eine andere Anwendung weiter. Er wird häufig verwendet, um Anwendungen, die auf Ports wie 3000 laufen, über einen Domainnamen erreichbar zu machen, ohne ihre internen Ports im Internet offenzulegen.

In dieser Anleitung konfigurieren Sie Nginx unter Ubuntu so, dass Anfragen an eine lokale Anwendung weitergeleitet werden. Außerdem verbinden Sie eine Domain und aktivieren HTTPS.

Was ist ein Nginx-Reverse-Proxy?

Ein Reverse-Proxy befindet sich zwischen den Besuchern und Ihrer Backend-Anwendung.

Statt sich direkt mit einer Anwendung auf Port 3000 zu verbinden, stellen Besucher eine Verbindung zu Nginx über die standardmäßigen HTTP- oder HTTPS-Ports her.

Nginx leitet die Anfrage an die Anwendung weiter und gibt deren Antwort zurück.

Der Ablauf einer Anfrage sieht so aus:

Besucher → Nginx → Backend-Anwendung

Diese Konfiguration wird häufig für Node.js-, Python- und andere Webanwendungen verwendet. Sie kann außerdem TLS-Terminierung, Lastverteilung und eine zentrale Verarbeitung von Anfragen ermöglichen.

Benötigen Sie einen VPS für Ihre Nginx-Konfiguration?
Stellen Sie Ihre Anwendungen mit Root-Zugriff und flexiblen Serverressourcen bereit.
VPS-Tarife entdecken →

Voraussetzungen

Bevor Sie beginnen, benötigen Sie:

  • Einen Server mit Ubuntu 24.04 LTS und sudo-Zugriff.
  • SSH-Zugriff auf Ihren Server.
  • Einen Domainnamen, der auf die öffentliche IP-Adresse Ihres Servers verweist.
  • Eine Backend-Anwendung, die auf einem lokalen Port Verbindungen entgegennimmt.

In diesem Beispiel verwenden wir Port 3000.

Wenn Sie mit SSH noch nicht vertraut sind, lesen Sie zunächst unseren Leitfaden für Einsteiger zu SSH-Befehlen.

So richten Sie einen Nginx-Reverse-Proxy ein

Schritt 1: Nginx unter Ubuntu installieren

Verbinden Sie sich per SSH mit Ihrem Ubuntu-Server.

Aktualisieren Sie den Paketindex und installieren Sie Nginx:

sudo apt update
sudo apt install nginx -y

Prüfen Sie, ob Nginx läuft:

sudo systemctl status nginx

Die Ausgabe sollte active (running) enthalten.

Falls Nginx nicht gestartet ist, führen Sie Folgendes aus:

sudo systemctl enable --now nginx

Sie können auch die öffentliche IP-Adresse Ihres Servers in einem Browser aufrufen. Wenn HTTP-Zugriff erlaubt ist, sollte die standardmäßige Nginx-Willkommensseite erscheinen.

Wenn Sie UFW verwenden, erlauben Sie HTTP- und HTTPS-Datenverkehr:

sudo ufw allow 'Nginx Full'

Prüfen Sie auch die Firewall-Regeln, die Sie bei Ihrem Hosting-Anbieter konfiguriert haben. Deaktivieren Sie die Firewall nicht, um Nginx erreichbar zu machen.

Schritt 2: Eine Backend-Testanwendung starten

Bevor wir den Reverse-Proxy konfigurieren, benötigen wir eine Anwendung, an die Nginx Anfragen weiterleiten kann.

Erstellen Sie für einen einfachen Test ein temporäres Verzeichnis:

mkdir -p ~/nginx-proxy-test
cd ~/nginx-proxy-test

Erstellen Sie eine einfache HTML-Seite:

echo '<h1>Nginx Reverse Proxy Works!</h1>' > index.html

Starten Sie nun den integrierten HTTP-Server von Python:

python3 -m http.server 3000 --bind 127.0.0.1

Damit wird Ihre Testseite auf Port 3000 bereitgestellt und ist nur über die lokale Loopback-Adresse erreichbar.

Lassen Sie dieses Terminal geöffnet und starten Sie eine zweite SSH-Sitzung.

Prüfen Sie, ob die Anwendung antwortet:

curl http://127.0.0.1:3000

Die Ausgabe sollte Folgendes enthalten:

<h1>Nginx Reverse Proxy Works!</h1>

Dieser Python-Server dient nur zur Demonstration. Verwenden Sie für eine produktive Anwendung den dafür empfohlenen Anwendungsserver und die empfohlene Konfiguration zur Dienstverwaltung.

Schritt 3: Eine Nginx-Reverse-Proxy-Konfiguration erstellen

Erstellen Sie einen neuen Nginx-Serverblock:

sudo nano /etc/nginx/sites-available/app.example.com

Ersetzen Sie app.example.com durch Ihre tatsächliche Domain.

Fügen Sie die folgende Konfiguration hinzu:

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

Speichern Sie die Datei.

Die Konfiguration verstehen

  • listen 80 nimmt HTTP-Anfragen entgegen.
  • server_name gibt an, welche Domain Nginx verarbeiten soll.
  • proxy_pass leitet Anfragen an die Anwendung auf Port 3000 weiter.
  • proxy_set_header übermittelt dem Backend nützliche Informationen über die ursprüngliche Anfrage.

Das Backend muss weitergeleitete Header verstehen und sicher verarbeiten. Konfigurieren Sie Anwendungen nur dann so, dass sie diesen Headern vertrauen, wenn die Anfragen über Ihren vertrauenswürdigen Proxy eintreffen.

Schritt 4: Die Konfiguration aktivieren und testen

Aktivieren Sie Ihren neuen Serverblock:

sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/

Wenn der Link bereits vorhanden ist, erstellen Sie ihn nicht erneut.

Prüfen Sie die Konfiguration auf Fehler:

sudo nginx -t

Wenn der Test erfolgreich ist, laden Sie die Nginx-Konfiguration neu:

sudo systemctl reload nginx

Rufen Sie nun Folgendes auf:

http://app.example.com

Wenn der DNS-Eintrag auf den richtigen Server verweist und das Test-Backend noch läuft, sollten Sie Folgendes sehen:

Der Nginx-Reverse-Proxy funktioniert!

Wenn stattdessen die standardmäßige Nginx-Seite erscheint, prüfen Sie die DNS-Einträge Ihrer Domain und die server_name-Konfiguration.

Schritt 5: HTTPS mit Let’s Encrypt aktivieren

Verwenden Sie für eine öffentliche Website HTTPS, statt den Datenverkehr unverschlüsselt zu lassen.

Prüfen Sie zunächst, ob Ihre Domain auf den richtigen Server aufgelöst wird und ob Port 80 für eingehende Verbindungen erreichbar ist. Beides ist für die standardmäßige HTTP-Zertifikatsvalidierung wichtig.

Installieren Sie Certbot über den offiziellen Snap-basierten Weg:

sudo snap install --classic certbot

Falls der Befehl certbot noch nicht verfügbar ist, erstellen Sie den Befehlslink:

sudo ln -s /snap/bin/certbot /usr/local/bin/certbot

Fordern Sie anschließend ein Zertifikat an:

sudo certbot --nginx -d app.example.com

Folgen Sie den Anweisungen. Certbot kann ein Zertifikat beziehen und Nginx so konfigurieren, dass Ihre Domain über HTTPS erreichbar ist.

Testen Sie danach die Zertifikatserneuerung:

sudo certbot renew --dry-run

Rufen Sie Folgendes auf:

https://app.example.com

Ihre Testanwendung sollte nun über eine verschlüsselte Verbindung geladen werden.

Schritt 6: Ihren Reverse-Proxy überprüfen

Prüfen Sie die HTTPS-Antwort:

curl -I https://app.example.com

Beim Python-Backend aus dem Beispiel zeigt eine HTTP-Antwort mit 200 OK an, dass die Anfrage die Anwendung erfolgreich erreicht hat.

Sie können auch prüfen, welche Prozesse auf Ihrem Server Verbindungen entgegennehmen:

sudo ss -ltnp

Ihre Nginx-Installation sollte auf den konfigurierten öffentlichen HTTP- und HTTPS-Ports Verbindungen entgegennehmen, während das Backend aus dem Beispiel auf 127.0.0.1:3000 Verbindungen entgegennimmt.

Beachten Sie, dass der temporäre Python-Server beendet wird, wenn Sie seine Terminalsitzung schließen. Produktive Anwendungen sollten unter einem Prozessmanager wie systemd laufen.

Häufige Probleme mit Nginx-Reverse-Proxys

502 Bad Gateway

Das bedeutet in der Regel, dass Nginx keine gültige Antwort vom Backend erhalten hat.

Prüfen Sie, ob Ihre Anwendung läuft und ob der Port in proxy_pass korrekt ist.

504 Gateway Timeout

Ein 504-Fehler tritt auf, wenn das Gateway die erforderliche Antwort vom Upstream nicht rechtzeitig erhält.

Untersuchen Sie langsame Anfragen an die Anwendung und die Leistung des Backends, bevor Sie die Zeitlimits erhöhen.

Die Domain ist nicht erreichbar

Prüfen Sie, ob der A-Eintrag Ihrer Domain auf die richtige öffentliche IP-Adresse verweist, die entsprechenden Firewall-Ports geöffnet sind und der Nginx-Serverblock zum angeforderten Hostnamen passt.

Häufig gestellte Fragen

Was ist proxy_pass in Nginx?

proxy_pass legt fest, wohin Nginx Anfragen weiterleitet, beispielsweise an eine HTTP-Anwendung, die auf 127.0.0.1:3000 läuft.

Kann Nginx als Reverse-Proxy für mehrere Anwendungen dienen?

Ja. Sie können separate Domains, Subdomains oder URL-Pfade konfigurieren, um Anfragen an unterschiedliche Backend-Anwendungen weiterzuleiten.

Benötige ich eine Domain für einen Nginx-Reverse-Proxy?

Nein. Sie können einen Reverse-Proxy mit einer IP-Adresse oder lokal testen. Eine Domain erleichtert jedoch das öffentliche Hosting und den Bezug eines standardmäßigen HTTPS-Zertifikats.

Ist ein Nginx-Reverse-Proxy kostenlos?

Ja. Die Open-Source-Version von Nginx unterstützt Reverse-Proxy-Funktionen ohne kommerzielle Lizenz.

Fazit

Sie haben einen Nginx-Reverse-Proxy unter Ubuntu konfiguriert, Anfragen an eine lokale Anwendung weitergeleitet und HTTPS aktiviert.

Die gleiche Grundkonfiguration lässt sich für Node.js, Python und andere HTTP-basierte Anwendungen anpassen, indem Sie die Backend-Adresse in proxy_pass ändern.

Bevor Sie diese Konfiguration produktiv einsetzen, stellen Sie sicher, dass Ihre Anwendung automatisch startet, mit geeigneten Berechtigungen läuft und ausreichend überwacht und abgesichert ist.

Table of Content

Ein 502-Bad-Gateway-Fehler in Nginx bedeutet in der Regel, dass Nginx keine gültige Antwort von einem

Ein 504-Gateway-Timeout-Fehler tritt auf, wenn ein Server, der als Gateway oder Proxy fungiert, nicht rechtzeitig

Ein MCP-Server ist ein Programm, das KI-Anwendungen über das Model Context Protocol (MCP) mit externen

Build your next project with ZYNOO

From your first website to demanding applications, choose the resources and control you need.

Shared Hosting

Start your blog or business website with cPanel, LiteSpeed and CloudLinux.

VPS Hosting

Grow your websites and applications with NVMe storage, KVM virtualization and full root access.

Dedicated Servers

Power demanding projects with your own physical server, dedicated resources and control over your environment.

Nach oben scrollen