Zum Hauptinhalt springen
Version: 5.6

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 ein OPC-Router-Redundanzpaar einzurichten. Im Folgenden werden Beispielkonfigurationen mit Nginx Plus und mit der Open-Source-Variante von Nginx gezeigt.

hinweis

Diese Beispiele setzen voraus, dass die interne OPC-Router-Redundanz bereits eingerichtet ist. Nginx übernimmt hier nicht die Redundanzentscheidung, sondern leitet Anfragen nur an den aktuell aktiven Endpunkt weiter.

Failover mit Nginx Plus

Dieses Beispiel zeigt eine Nginx-Konfiguration, die ein Failover für ein OPC-Router-Redundanzpaar ermöglicht.

nginx.conf
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;
# Leitet den Request an einen der in opcrouter-service definierten Endpunkte weiter.
proxy_pass http://opcrouter-service;

# Prüft die Verfügbarkeit der Endpunkte.
health_check
# Intervall in Sekunden, in dem die Endpunkte geprüft werden.
interval=5
# Legt fest, wie oft ein Request hintereinander fehlschlagen darf, bevor ein Endpunkt als "Unhealthy" gilt.
fails=1
# Legt fest, wie oft ein Request hintereinander erfolgreich sein muss, bevor der Endpunkt als "Healthy" gilt.
passes=1
# URL, über die der Gesundheitsstatus 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 im folgenden Beispiel ein passiver Health Check verwendet.

nginx.conf
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 von fail_timeout auftreten dürfen, bevor der Server für fail_timeout als "Unhealthy" gilt.
}

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, hier bei Fehlern, Timeouts sowie bei den HTTP-Codes 404 und 503.
proxy_next_upstream error timeout http_404 http_503;
}
}
}