Im Konfigurieren Nginx als Load Balancerhaben wir die grundlegende Einrichtung von Nginx Als Load Balancer: Lernen Sie, den Datenverkehr zwischen Servern zu verteilen, Upstream-Gruppen zu konfigurieren und Balancing-Algorithmen auszuwählen. Mit diesem Wissen können Sie ein einfaches, aber effektives System zur Bearbeitung von Anfragen erstellen. In realen Hochlastumgebungen sind jedoch zusätzliche Mechanismen zur Gewährleistung von Sicherheit, Geschwindigkeit und Stabilität von entscheidender Bedeutung.
In diesem Teil werden wir uns mit advanced Nginx Konfigurationen die Ihren Load Balancer in ein zuverlässiges und leistungsstarkes Tool verwandeln. Sie lernen, wie Sie die SSL-Terminierung zum Schutz Ihrer Daten konfigurieren, die Leistung durch Timeouts und Keepalive-Verbindungen optimieren, benutzerdefinierte Header und Fehlerbehandlung hinzufügen und ein vollständiges Konfigurationsbeispiel mit allen Komponenten kennenlernen. Wir geben außerdem Empfehlungen für Tests und Monitoring.
SSL-Terminierung auf dem Load Balancer
SSL-Terminierung ist der Prozess der Entschlüsselung HTTPS-Verkehr auf dem Load Balancer (Nginx), bevor es unverschlüsselt an Backend-Server weitergeleitet wird (HTTP). Dieser Ansatz reduziert die Backend-Last, da ressourcenintensive Verschlüsselungs-/Entschlüsselungsvorgänge ausschließlich von NginxDarüber hinaus vereinfacht die SSL-Terminierung die Zertifikatsverwaltung: Zertifikate müssen nur einmal auf dem Balancer installiert werden, nicht auf jedem Server im Pool. Dies ist besonders wichtig für große Systeme, bei denen die Aktualisierung von Zertifikaten über mehrere Knoten hinweg arbeitsintensiv wäre.
Konfigurieren HTTPS ein Nginx beinhaltet das Hinzufügen von SSL-Zertifikaten (z. B. von Let's Encrypt) zur Konfiguration. Beispiel Server Block:
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/fullchain.pem; # public certificate
ssl_certificate_key /etc/nginx/ssl/privkey.pem; # private key
location / {
proxy_pass http://backend; # forward traffic to backend via HTTP
proxy_set_header Host $host;
}
}So leiten Sie automatisch um HTTP Anfragen an HTTPS, hinzufügen:
server {
listen 80;
return 301 https://$host$request_uri; # redirect to HTTPS
}SSL-Terminierung wird Nginx in ein sicheres Gateway, das Ihre gesamte Infrastruktur schützt und Backends die Möglichkeit gibt, sich auf Kernaufgaben zu konzentrieren.
Leistungsoptimierung
Um einen effizienten Load Balancer-Betrieb zu gewährleisten, minimieren Sie Verzögerungen und reduzieren Sie die Backend-Serverlast. Beginnen Sie mit der Konfiguration Zeitüberschreitungen:
- Proxy_Connect_Timeout legt die maximale Zeit zum Herstellen einer Verbindung mit einem Backend fest (z. B. 5 Sekunden).
- Proxy_read_timeout definiert, wie lange Nginx wartet nach der Verbindung auf eine Serverantwort.
location / {
proxy_connect_timeout 5s; # do not wait longer than 5 seconds
proxy_read_timeout 10s; # data read timeout
}Diese Parameter verhindern, dass Anfragen aufgrund langsamer oder überlasteter Backends „hängen bleiben“.
Keepalive-Verbindungen Reduzieren Sie den Aufwand durch wiederholtes Wiederherstellen von Verbindungen. Anstatt nach jeder Anfrage eine Verbindung zu schließen, Nginx hält es für die Wiederverwendung am Leben:
upstream backend {
keepalive 32; # number of persistent connections
server 192.168.1.10:80;
}Dies ist besonders wichtig für Systeme mit hohem Datenverkehr und Tausenden von Anfragen pro Sekunde.
Zwischenspeichern statischer Inhalte reduziert die Backend-Last durch die Speicherung häufig angeforderter Daten (Bilder, CSS, JS) auf Balancer-Ebene:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g;
location /static/ {
proxy_cache my_cache; # enable cache for static content
proxy_pass http://backend;
}Caching beschleunigt Benutzerreaktionen und reduziert den Ressourcenverbrauch des Servers. Zusammen gewährleisten diese Methoden die Systemreaktion auch bei Datenverkehrsspitzen.
Erweiterte Einstellungen
Um die Zuverlässigkeit und Benutzerfreundlichkeit des Systems zu verbessern, konfigurieren Sie Fehlerbehandlung. Benutzerdefinierte Seiten für 5xx-Codes verbessern die Benutzererfahrung und verbergen Details zu technischen Fehlern. Beispiel:
error_page 500 502 503 504 /error.html;
location = /error.html {
root /usr/share/nginx/html; # path to HTML page
}Dadurch werden Benutzer bei Backend-Fehlern auf eine eindeutige Fehlerseite umgeleitet.
Benutzerdefinierte Kopfzeilen Helfen Sie dabei, wichtige Informationen an Backends weiterzugeben. Beispielsweise wird die tatsächliche IP-Adresse des Clients beibehalten (die sonst durch die IP des Balancers ersetzt würde):
location / {
proxy_set_header X-Real-IP $remote_addr; # original client IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy chain
}Dies ist für die Protokollierung, Analyse und Geolokalisierung auf Backend-Servern von entscheidender Bedeutung.
Sticky Sessions (verfügbar in Nginx Plus) Beheben Sie den Verlust von Sitzungsdaten beim Wechsel zwischen Servern. Verwenden Sie Cookies, um Clients an bestimmte Backends zu binden:
upstream backend {
sticky cookie srv_id expires=1h domain=.example.com path=/;
server 192.168.1.10:80;
server 192.168.1.11:80;
}Die srv_id Der Parameter ist der Cookiename, der den Serverantworten hinzugefügt wird. Dies ist für Anwendungen mit Einkaufswagen oder Authentifizierung unerlässlich.
FAQ
- F: Was ist SSL-Terminierung in Nginx?
A: SSL-Terminierung bedeutet Nginx übernimmt die Entschlüsselung von HTTPS-Verkehr, bevor Anfragen an Backend-Server weitergeleitet werden, wodurch deren Arbeitslast reduziert wird. - F: Warum verwenden Nginx für den Lastenausgleich?
A: Nginx verteilt eingehende Anfragen effizient auf mehrere Server und verbessert so Leistung, Fehlertoleranz und Skalierbarkeit. - F: Wie verbessert die SSL-Terminierung die Leistung?
A: Durch die Auslagerung von Verschlüsselungsaufgaben von Backend-Servern werden durch die SSL-Terminierung Ressourcen freigegeben, Reaktionszeiten beschleunigt und die Zertifikatsverwaltung vereinfacht. - F: Kann ich Sticky Sessions aktivieren mit Nginx?
A: Ja, Sticky Sessions werden unterstützt in Nginx Außerdem können Benutzeranfragen immer denselben Backend-Server erreichen. - F: Ist Caching bei der SSL-Terminierung sinnvoll?
A: Absolut. Die Kombination von SSL-Terminierung mit Nginx Caching reduziert die Serverlast und beschleunigt die Bereitstellung von Inhalten.