Wie können wir helfen?

Kategorien
Inhalt

Schritt-für-Schritt-Anleitung: NGINX Reverse Proxy einrichten

Navigation:
< zurück

Inhaltsverzeichnis

Was ist ein NGINX Reverse Proxy?

Ein NGINX Reverse Proxy ist ein zentraler Einstiegspunkt für eingehenden Datenverkehr in eine Web-Infrastruktur. Es leitet Anfragen an mehrere Backend-Server (z.B. Webserver, Applikationsserver) weiter und übernimmt dabei wichtige Aufgaben:

  • Load Balancing: Verteilung der Last über mehrere Server für bessere Leistung und Ausfallsicherheit
  • Caching: Zwischenspeichern von Inhalten zur Leistungsoptimierung
  • SSL-Terminierung: Entschlüsselung von HTTPS-Verkehr und Weiterleitung an Backend-Server

Ein NGINX Reverse Proxy fungiert als zentraler Kontrollpunkt und bietet viele Vorteile wie Load Balancing, Caching und sichere SSL-Terminierung für eine robuste und performante Web-Infrastruktur.

Beispielszenario:

  • Mehrere Webserver für eine Website
  • NGINX Reverse Proxy verteilt Anfragen basierend auf Auslastung (Load Balancing)
  • Zwischenspeichert häufig angeforderte Inhalte (Caching)
  • Terminiert SSL-Verbindungen und leitet entschlüsselte Anfragen weiter

Voraussetzungen

Bevor Sie mit der Einrichtung eines NGINX Reverse Proxy beginnen, stellen Sie sicher, dass Sie über die folgenden Voraussetzungen verfügen:

Hardware

  • Ein physischer oder virtueller Server mit ausreichenden Ressourcen (RAM, CPU, Speicher) für Ihre Anforderungen

Software

  • NGINX installiert und einsatzbereit auf Ihrem Server
  • Eine oder mehrere Web-Anwendungen oder Backend-Server, die über den Reverse Proxy bedient werden sollen

Hinweis: Ein Reverse Proxy wie NGINX kann die Leistung und Sicherheit Ihrer Webanwendungen erheblich verbessern, indem er Funktionen wie Load Balancing, Caching und SSL-Terminierung bereitstellt.

Beispiel: Angenommen, Sie haben eine Node.js-Anwendung, die auf Port 3000 läuft, und eine PHP-Anwendung auf Port 8000. Mit NGINX als Reverse Proxy können Sie beide Anwendungen über einen einzigen Port (z.B. 80 oder 443) verfügbar machen und weitere Leistungsoptimierungen vornehmen.

Schritt 1: NGINX-Konfiguration

Die Konfiguration eines NGINX Reverse Proxy erfolgt in der Konfigurationsdatei, üblicherweise in /etc/nginx/nginx.conf oder /etc/nginx/conf.d/. Hier müssen wir zunächst Upstreams für unsere Backend-Server definieren und dann einen Server-Block erstellen, der den Reverse Proxy selbst konfiguriert.

Upstreams definieren

Ein Upstream-Block definiert eine Gruppe von Servern, an die Anfragen weitergeleitet werden. Hier können wir Load Balancing und Health Checks konfigurieren:

upstream backend {
    server 10.0.0.1:8000;
    server 10.0.0.2:8000;
}

Server-Block erstellen

Der Server-Block enthält die Konfiguration für den Reverse Proxy selbst. Hier definieren wir den Listening-Port, Hostnamen und die proxy_pass-Anweisung zum Weiterleiten der Anfragen an die Upstreams:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
    }
}

Wichtig: Mit den proxy_-Direktiven können wir weitere Funktionen wie Caching, SSL-Terminierung und Leistungsoptimierung konfigurieren.

Diese Grundkonfiguration leitet alle eingehenden HTTP-Anfragen für example.com an die definierten Backend-Server weiter und verteilt die Last mit Round-Robin Load Balancing.

Schritt 2: Load Balancing konfigurieren

NGINX bietet verschiedene Load-Balancing-Methoden, um den Datenverkehr auf mehrere Server aufzuteilen. Hier sind die häufigsten Methoden:

MethodeBeschreibung
Round-RobinVerteilt Anfragen nacheinander auf alle Server.
IP-HashWeist Client-IPs permanent einem Server zu, basierend auf einem Hash-Wert der IP-Adresse.
Least-ConnectionsSendet neue Anfragen an den Server mit den wenigsten aktiven Verbindungen.

Für zustandsbehaftete Anwendungen wie E-Commerce-Websites ist es wichtig, Sticky-Sessions zu aktivieren. Dadurch werden aufeinanderfolgende Anfragen desselben Clients an denselben Server geleitet.

Gesundheitschecks für Hochverfügbarkeit: NGINX kann aktiv die Erreichbarkeit der Backends überwachen und nicht erreichbare Server temporär aus dem Load-Balancing-Pool entfernen.

upstream backend {
    server 10.10.10.100:8080;
    server 10.10.10.101:8080;

    ip_hash;
    keepalive 64;
}

Dieses Beispiel zeigt eine Load-Balancing-Konfiguration mit IP-Hash für zwei Backend-Server auf Port 8080.

Schritt 3: Caching einrichten

Um die Leistung Ihrer Website weiter zu verbessern, sollten Sie das Caching von statischen Inhalten wie CSS, JavaScript und Bildern in NGINX aktivieren. Hier sind die wichtigsten Punkte:

  • Zwischenspeichern statischer Inhalte: Durch das Caching von Dateien wie CSS, JavaScript und Bildern reduzieren Sie die Anzahl der Anfragen, die an den Webserver gesendet werden müssen, was die Ladezeiten verkürzt.

Beispiel für Caching von CSS und JavaScript:

location ~* \.(?:css|js)$ {
  expires 7d;
  access_log off;
  add_header Cache-Control "public";
}
    
  • Microcaching: Mit Microcaching können häufig abgerufene Inhalte wie HTML-Seiten für eine kurze Zeit zwischengespeichert werden, was die Belastung des Backends reduziert.

Wichtig: Microcaching sollte nur für nicht-personalisierte Inhalte verwendet werden, da andernfalls Inkonsistenzen auftreten können.

  • Cache-Invalidierung: Um sicherzustellen, dass Benutzer immer die aktuellsten Inhalte erhalten, müssen zwischengespeicherte Inhalte invalidiert werden, wenn sich der Ursprungsinhalt ändert.

Durch die richtige Konfiguration des Caching in NGINX können Sie die Leistung und Skalierbarkeit Ihrer Website drastisch verbessern und gleichzeitig die Serverauslastung reduzieren.

Schritt 4: SSL/TLS konfigurieren

Eine sichere Verbindung ist für jede moderne Webanwendung unerlässlich. Mit NGINX lässt sich SSL/TLS unkompliziert einrichten und HTTP/2 für höhere Leistung aktivieren.

Zertifikate einrichten

Zertifikate von einer vertrauenswürdigen Zertifizierungsstelle (CA) wie Let’s Encrypt sind der Schlüssel zu sicheren HTTPS-Verbindungen. Sie lassen sich einfach mit dem kostenlosen Certbot-Tool beantragen und verwalten.

sudo certbot --nginx

Führt Certbot für NGINX aus und richtet ein Zertifikat ein.

SSL-Terminierung

Der NGINX Reverse Proxy übernimmt die SSL-Terminierung und entlastet so die Webanwendung. Dies geschieht, indem der verschlüsselte Traffic beim Proxy entschlüsselt und an den Zielserver als unverschlüsselter Traffic weitergeleitet wird.

Hinweis: Für eine End-to-End-Verschlüsselung sollte auch die Kommunikation zwischen Proxy und Zielserver verschlüsselt werden.

HTTP/2 aktivieren

HTTP/2 ist der neue Standard und bietet deutliche Leistungsvorteile gegenüber HTTP/1.1, insbesondere bei Anwendungen mit vielen Assets. In NGINX lässt es sich mit wenigen Zeilen in der Konfiguration aktivieren:

listen 443 ssl http2;
server_tokens off;

Mit diesen Schritten steht einer sicheren und performanten Bereitstellung von Webanwendungen mit NGINX nichts mehr im Wege.

Schritt 5: Überwachung und Protokollierung

Eine effektive Überwachung und Protokollierung ist unerlässlich für die Fehlerbehebung, Leistungsoptimierung und Sicherheit Ihres NGINX Reverse Proxy. Zwei zentrale Elemente sind die Access- und Error-Logs.

Access-Logs

Das Access-Log protokolliert jede eingehende Anfrage an den NGINX Reverse Proxy. Es enthält wertvolle Informationen wie die Client-IP, den Zeitstempel, die angefragte URL, den HTTP-Statuscode und die übertragene Datenmenge.

Error-Logs

Das Error-Log zeichnet alle Warnungen, Fehler und kritischen Ereignisse auf, die während des Betriebs des NGINX Reverse Proxy auftreten. Es ist ein entscheidendes Hilfsmittel bei der Fehlersuche und -behebung.

Zusätzlich zu den Logs können Sie Monitoring-Tools wie Prometheus und Grafana einsetzen, um wichtige Kennzahlen wie Antwortzeiten, Fehlerraten und Systemauslastung in Echtzeit zu visualisieren.

Beispiel einer Prometheus-Abfrage für NGINX

nginx_http_requests_total_rate{job="nginx"}

Diese Abfrage zeigt die aktuelle Rate der eingehenden HTTP-Anfragen für den NGINX-Dienst an.

Durch regelmäßige Überprüfung der Logs und Monitoring-Dashboards können Sie potenzielle Probleme frühzeitig erkennen und beheben, bevor sie zu Ausfällen oder Leistungseinbußen führen.

Schlagwörter:

Kommentar absenden

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert