Redundanz Failover mit Nginx
Was ist Nginx?
Nginx ist ein leistungsstarker, quelloffener Web- und Reverse-Proxy-Server, bekannt für seine Performance und Skalierbarkeit. Neben der Open-Source-Version gibt es Nginx Plus, eine kommerzielle Lösung mit erweiterten Features wie Sicherheitsfunktionen und Support. Beide werden für Caching, Load Balancing und die Bereitstellung moderner Webanwendungen verwendet.
Es gibt mehrere Möglichkeiten mit Nginx ein Failover für die OPC Router Redundanz einzurichten. Im Folgenden wird die Einrichtung eines Failovers mit Nginx Plus und Nginx behandelt.
Failover mit Nginx Plus
Dies ist ein Beispiel für eine Nginx Konfiguration, die ein Failover für ein OPC Router Redundanzpaar ermöglicht.
events { }
http {
upstream opcrouter-service {
zone opcrouter-service 64k;
# Definiert die Server, an die ein Request weitergeleitet werden kann.
server opcrouter-primary:8080;
server opcrouter-secondary:8080;
}
server {
listen 80;
location /api {
# Ersetzt /api/ durch /services/MyRestServer/api/
rewrite ^/api/(.*) /services/MyRestServer/api/$1 break;
# Weiterleiten des Requests an einen der Endpunkte, die in opcrouter-service definiter sind.
proxy_pass http://opcrouter-service;
# Prüfung der Gesundheit der Endpunkte
health_check
# Intervall in Sekunden, in dem die Gesundheit der Endpunkte geprüft wird.
interval=5
# Legt fest, wie oft hintereinander der Request fehlschlagen darf, bevor der der Endpunkt als "Unhealthy" gilt.
fails=1
# Legt fest, wie oft der Request hintereinander erfolgreich sein muss, bevor der Endpunkt als "Healthy" gilt.
passes=1
# Die Url, anhand der der Gesundheitsstaus ermittelt wird.
uri=/health/runtime/ready;
}
}
}
Failover mit Nginx
In der Kostenfreien Version sind aktive Health Checks mit health_check
nicht verfügbar. Daher wird in folgendem Beispiel ein passiver Health Check verwendet.
events { }
http {
upstream opcrouter-service {
# Definiert die Server, an die ein Request weitergeleitet werden kann.
server opcrouter-primary:8080 max_fails=2 fail_timeout=5s;
server opcrouter-secondary:8080 max_fails=2 fail_timeout=5s;
# max_fails ist die Anzahl an Fehlschlägen, die innerhalb des fail_timeout passieren dürfen, bevor der Server temporär (für fail_timeout) als "Unhealthy" angesehen wird.
}
server {
listen 80;
location /api {
rewrite ^/api/(.*) /services/MyRestServer/api/$1 break;
proxy_pass http://opcrouter-service;
# Legt fest, in welchen Fällen der Request mit einem anderen Server wiederholt werden soll. In diesem Fall bei Fehlern, Timeouts und bei den http codes 404 und 503
proxy_next_upstream error timeout http_404 http_503;
}
}
}