Nginx (ausgesprochen „Engine-X“) ist ein leistungsstarker, flexibler Webserver, der sich durch hohe Leistung und Skalierbarkeit auszeichnet. Neben seiner Rolle als Webserver kann Nginx auch als Reverse Proxy fungieren, wodurch er eingehende Anfragen an einen oder mehrere Back-End-Server weiterleitet. Diese Funktion macht Nginx besonders nützlich für Lastverteilung, Caching und die Verbesserung der Anwendungsperformance.
In diesem Blog-Beitrag zeige ich dir, wie du Nginx auf einem Linux-Server einrichtest und sowohl als Webserver als auch als Reverse Proxy konfigurierst.
1. Was ist Nginx und warum sollte man es verwenden?
Nginx ist ein Open-Source-Webserver, der besonders für seine Effizienz und Skalierbarkeit bekannt ist. Es kann als Webserver für statische Inhalte, als Proxy für Backend-Anwendungen (z.B. PHP, Node.js) oder als Reverse Proxy verwendet werden. Nginx bietet viele Vorteile:
- Hohe Leistung und geringe Ressourcenanforderungen: Nginx kann eine große Anzahl gleichzeitiger Verbindungen verarbeiten, ohne viel CPU oder RAM zu verbrauchen.
- Reverse Proxy und Load Balancing: Durch die Fähigkeit, Anfragen an Backend-Server weiterzuleiten, kannst du Nginx als Load Balancer einsetzen, um den Traffic auf mehrere Server zu verteilen.
- Sicherheit und Skalierbarkeit: Nginx bietet Unterstützung für SSL/TLS, Ratenbegrenzung und andere Sicherheitsmechanismen.
2. Installation von Nginx auf Linux
Die Installation von Nginx hängt von der verwendeten Linux-Distribution ab. Im Folgenden sind die Befehle für die gängigsten Distributionen:
Debian/Ubuntu:
sudo apt update
sudo apt install nginx
CentOS/RHEL:
sudo yum install epel-release
sudo yum install nginx
Starten und Aktivieren des Nginx-Dienstes:
Nach der Installation musst du Nginx starten und sicherstellen, dass es beim Systemstart automatisch ausgeführt wird:
sudo systemctl start nginx
sudo systemctl enable nginx
Du kannst den Status von Nginx überprüfen, um sicherzustellen, dass es korrekt läuft:
sudo systemctl status nginx
3. Nginx als Webserver einrichten
Standardmäßig dient Nginx als Webserver, der statische Inhalte wie HTML-Dateien, CSS, JavaScript und Bilder bereitstellt.
3.1. Standardverzeichnis und Web-Inhalte
Das Standarddokumentenstammverzeichnis für Nginx unter Ubuntu/Debian ist /var/www/html
, und die Konfigurationsdateien befinden sich in /etc/nginx/
. Die Standardkonfiguration kannst du unter /etc/nginx/sites-available/default
bearbeiten.
Du kannst eine einfache HTML-Datei erstellen, um zu testen, ob Nginx korrekt funktioniert:
sudo nano /var/www/html/index.html
Füge folgenden Inhalt hinzu:
<!DOCTYPE html>
<html>
<head>
<title>Willkommen bei Nginx</title>
</head>
<body>
<h1>Nginx läuft erfolgreich!</h1>
</body>
</html>
Speichere die Datei und öffne deinen Webbrowser. Gib die IP-Adresse deines Servers ein, um zu überprüfen, ob die Webseite geladen wird. Wenn alles funktioniert, solltest du die Meldung „Nginx läuft erfolgreich!“ sehen.
3.2. Konfigurationsdateien verwalten
Nginx organisiert Konfigurationen in zwei Verzeichnissen:
- /etc/nginx/sites-available/: Hier befinden sich alle Konfigurationsdateien für die einzelnen Websites.
- /etc/nginx/sites-enabled/: Dieses Verzeichnis enthält symbolische Links zu den aktivierten Konfigurationen.
Um eine neue Webseite oder Anwendung zu konfigurieren, erstelle eine neue Datei in sites-available
und erstelle dann einen symbolischen Link in sites-enabled
.
Zum Beispiel kannst du eine Konfigurationsdatei für eine Domain wie example.com
hinzufügen:
sudo nano /etc/nginx/sites-available/example.com
Füge eine einfache Konfiguration hinzu:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Erstelle das Verzeichnis für deine Webseite und eine Beispiel-HTML-Datei:
sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html
Füge einfachen HTML-Inhalt hinzu, speichere die Datei und erzeuge dann einen symbolischen Link:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
Überprüfe die Nginx-Konfiguration auf Fehler:
sudo nginx -t
Wenn alles korrekt ist, starte Nginx neu:
sudo systemctl restart nginx
Jetzt sollte deine Webseite unter http://example.com
verfügbar sein.
4. Nginx als Reverse Proxy einrichten
Ein Reverse Proxy leitet Anfragen an einen Backend-Server weiter, z. B. einen Anwendungsserver wie Node.js, PHP, oder sogar einen anderen Webserver. Nginx kann dabei auch als Load Balancer fungieren, der Anfragen gleichmäßig auf mehrere Backend-Server verteilt.
4.1. Grundlegende Reverse Proxy-Konfiguration
Um Nginx als Reverse Proxy zu konfigurieren, kannst du die Proxy-Direktive in der Konfigurationsdatei nutzen.
Bearbeite die Konfigurationsdatei für deine Anwendung oder Webseite:
sudo nano /etc/nginx/sites-available/example.com
Statt statische Inhalte bereitzustellen, leitest du jetzt alle Anfragen an einen Backend-Server weiter. Zum Beispiel, wenn deine Anwendung auf einem Node.js-Server auf Port 3000 läuft, kannst du folgendes hinzufügen:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost: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 Direktive proxy_pass
leitet alle Anfragen an den Backend-Server weiter, der auf http://localhost:3000
läuft. Die zusätzlichen Header stellen sicher, dass Informationen über den ursprünglichen Client korrekt an den Backend-Server weitergeleitet werden.
Speichere die Änderungen und teste die Konfiguration:
sudo nginx -t
Starte Nginx neu:
sudo systemctl restart nginx
Deine Anwendung sollte jetzt unter http://example.com
verfügbar sein, obwohl sie im Hintergrund auf Port 3000 läuft.
4.2. Load Balancing mit Nginx
Nginx kann auch als Load Balancer fungieren, der Anfragen auf mehrere Backend-Server verteilt. Dies ist besonders nützlich für Anwendungen, die auf mehreren Servern ausgeführt werden, um Lasten gleichmäßig zu verteilen und die Verfügbarkeit zu verbessern.
Angenommen, du hast drei Backend-Server, die auf den Ports 3000, 3001 und 3002 laufen. Du kannst Nginx so konfigurieren, dass es Anfragen gleichmäßig verteilt:
upstream backend_servers {
server localhost:3000;
server localhost:3001;
server localhost:3002;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
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 Direktive upstream
definiert die Backend-Server. Nginx verteilt die Anfragen nach dem Round-Robin-Verfahren, wodurch jede Anfrage gleichmäßig auf die Server verteilt wird.
Speichere die Datei, teste die Konfiguration und starte Nginx neu.
5. SSL/TLS für sichere Verbindungen einrichten
Um HTTPS zu verwenden, benötigst du ein SSL-Zertifikat. Du kannst ein selbst signiertes Zertifikat erstellen oder ein kostenloses Zertifikat von Let’s Encrypt verwenden.
5.1. Let’s Encrypt SSL-Zertifikat einrichten
Let’s Encrypt bietet kostenlose, vertrauenswürdige SSL-Zertifikate. Du kannst das Tool certbot
verwenden, um SSL automatisch für deine Domain zu konfigurieren.
- Installiere
certbot
:- Auf Debian/Ubuntu:
sudo apt install certbot python3-certbot-nginx
2. Auf CentOS/RHEL:
sudo yum install certbot python3-certbot-nginx
3. Fordere ein SSL-Zertifikat für deine Domain an:
sudo certbot --nginx -d example.com -d www.example.com
- Certbot konfiguriert Nginx automatisch und richtet die SSL-Verschlüsselung für deine Domain ein.
Nach erfolgreicher Installation kannst du überprüfen, ob SSL korrekt funktioniert, indem du die HTTPS-Version deiner Domain im Browser aufrufst.
6. Fazit
Nginx ist ein vielseitiger und leistungsstarker Webserver, der sich leicht in verschiedenen Szenarien einsetzen lässt, sei es als einfacher Webserver für statische Inhalte oder als Reverse Proxy für Backend-Anwendungen. In diesem Beitrag hast du gelernt, wie du Nginx installierst, konfigurierst und sowohl als Webserver als auch als Reverse Proxy einsetzt. Nginx bietet eine Vielzahl von Möglichkeiten, um die Performance und Sicherheit deiner Webanwendungen zu verbessern.