Wie kann ich NGINX so konfigurieren, dass es als Reverse-Proxy für einen Webserver fungiert?
- Grundlegende Voraussetzungen
- Installation von NGINX
- Grundstruktur der NGINX-Konfiguration
- Beispiel: Einfache Reverse-Proxy-Konfiguration
- Erklärung der Direktiven
- Wichtige zusätzliche Einstellungen
- Aktivieren und Testen der Konfiguration
- Optional: SSL/TLS-Verschlüsselung
- Fazit
NGINX ist ein leistungsfähiger Webserver, der häufig als Reverse-Proxy verwendet wird. Ein Reverse-Proxy empfängt Anfragen von Clients und leitet diese an einen oder mehrere Backend-Webserver weiter. Das kann helfen, Lastverteilung, Sicherheit und SSL-Terminierung zentral zu verwalten. Im Folgenden wird ausführlich beschrieben, wie Sie NGINX so konfigurieren, dass es als Reverse-Proxy für einen Webserver fungiert.
Grundlegende Voraussetzungen
Bevor Sie mit der Konfiguration beginnen, sollten Sie sicherstellen, dass NGINX auf Ihrem Server installiert ist. Außerdem benötigen Sie einen Backend-Webserver, der Anfragen auf einem bestimmten Port (zum Beispiel 8080) oder einer IP-Adresse verarbeitet. NGINX wird die Anfragen an diesen Backend-Server weiterleiten.
Installation von NGINX
Auf den meisten Linux-Distributionen können Sie NGINX über den Paketmanager installieren. Unter Debian/Ubuntu verwenden Sie zum Beispiel:
sudo apt updatesudo apt install nginxUnter CentOS/RHEL lautet der Befehl:
sudo yum install nginxGrundstruktur der NGINX-Konfiguration
Die zentrale Konfigurationsdatei von NGINX befindet sich in der Regel unter /etc/nginx/nginx.conf. Für spezifische Webseiten oder Dienste werden häufig separate Konfigurationsdateien in /etc/nginx/sites-available/ (und dann mit symbolischen Links zu /etc/nginx/sites-enabled/) verwendet.
Die Konfiguration für einen Reverse-Proxy erfolgt im Rahmen eines server-Blocks, in dem Sie einen location-Block definieren, der eingehende HTTP-Anfragen empfängt und an den Backend-Server weiterleitet.
Beispiel: Einfache Reverse-Proxy-Konfiguration
Angenommen, Ihr Backend-Webserver läuft auf demselben Host unter Port 8080. Die NGINX-Konfiguration könnte folgendermaßen aussehen:
server { listen 80; server_name example.com; location / { proxy_pass http://127.0.0.1:8080; 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 Konfiguration bewirkt, dass NGINX auf Port 80 Anfragen entgegennimmt und diese an den Backend-Server weiterleitet, der auf http://127.0.0.1:8080 lauscht. Zusätzlich werden wichtige HTTP-Header wie der ursprüngliche Hostname und die IP-Adresse des Clients an den Backend-Server übergeben, was für Protokollierung und Anwendungserkennung relevant sein kann.
Erklärung der Direktiven
listen 80; weist NGINX an, auf Port 80 (Standard HTTP) zu lauschen. Mit server_name example.com; wird die Domain definiert, für die diese Konfiguration gilt.
Im location /-Block steht proxy_pass für die Weiterleitung der eingehenden Anfragen an den angegebenen Backend-Server. Die zusätzlichen proxy_set_header-Anweisungen sorgen dafür, dass der Backend-Server Informationen über den ursprünglichen Request erhält, wie zum Beispiel den originalen Host, die reale IP-Adresse des Clients und das verwendete Protokoll (HTTP/HTTPS).
Wichtige zusätzliche Einstellungen
In manchen Fällen macht es Sinn, zusätzlich das Timeout für Proxys anzupassen oder Response-Header zu verändern. Auch das Handling von WebSocket-Verbindungen benötigt oftmals spezielle Einstellungen. Ein Beispiel für erweiterte Einstellungen:
location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 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_read_timeout 90;}Diese Konfiguration ist insbesondere für Anwendungen relevant, die WebSockets nutzen, da hier spezielle Header zum Upgrade der Verbindung gesetzt werden.
Aktivieren und Testen der Konfiguration
Nachdem Sie Ihre Konfigurationsdatei erstellt oder angepasst haben, sollten Sie die NGINX-Konfiguration auf Syntaxfehler überprüfen. Das gelingt mit dem Kommando:
sudo nginx -tWenn der Test erfolgreich ist, können Sie NGINX neu laden, damit die Änderungen wirksam werden:
sudo systemctl reload nginxNun können Sie im Browser http://example.com aufrufen – die Anfragen werden über NGINX an den Backend-Webserver weitergeleitet.
Optional: SSL/TLS-Verschlüsselung
Oft wird NGINX auch genutzt, um SSL/TLS-Termination durchzuführen. Dabei übernimmt NGINX die Entschlüsselung der HTTPS-Verbindung und kommuniziert mit dem Backend unverschlüsselt oder ebenfalls verschlüsselt. Ein Beispiel für eine HTTPS-Konfiguration inklusive Reverse-Proxy:
server { listen 443 ssl; server_name example.com; ssl_certificate /etc/ssl/certs/your_cert.pem; ssl_certificate_key /etc/ssl/private/your_key.pem; location / { proxy_pass http://127.0.0.1:8080; 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; }}Zusätzlich empfiehlt es sich, einen Redirect von Port 80 auf 443 zu konfigurieren, um alle HTTP-Anfragen automatisch auf HTTPS umzuleiten.
Fazit
Die Konfiguration von NGINX als Reverse-Proxy ist relativ unkompliziert und bietet eine flexible Möglichkeit, Backend-Webserver zu schützen, SSL abzuwickeln und Anfragen effizient weiterzuleiten. Durch die Verwendung von proxy_pass und das Setzen entsprechender Header kann NGINX an verschiedenste Szenarien angepasst werden. Für komplexere Anforderungen sind auch Load-Balancing, Caching oder Sicherheitsfeatures (wie Rate-Limiting oder IP-Filterung) möglich.
