sticky: NGINX Sticky-Cookie-Modul
Installation
Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:
- RedHat Enterprise Linux 7, 8, 9 und 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 und Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-sticky
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-sticky
Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ngx_http_sticky_module.so;
Dieses Dokument beschreibt nginx-module-sticky v1.3.0, veröffentlicht am 27. Juni 2022.
modifizierte und erweiterte Version; siehe Changelog.txt
Beschreibung
Ein NGINX-Modul, um ein Sticky-Cookie hinzuzufügen, das immer an denselben Upstream-Server weitergeleitet wird.
Wenn man mit mehreren Backend-Servern arbeitet, ist es manchmal nützlich, dass ein Client (Browser) immer vom selben Backend-Server bedient wird (zum Beispiel für die Sitzungspersistenz).
Die Verwendung einer Persistenz nach IP (mit dem ip_hash Upstream-Modul) ist möglicherweise keine gute Idee, da es Situationen geben könnte, in denen viele verschiedene Browser mit derselben IP-Adresse (hinter Proxys) kommen und das Lastenausgleichssystem nicht fair ist.
Die Verwendung eines Cookies zur Verfolgung des Upstream-Servers macht jeden Browser einzigartig.
Wenn das Sticky-Modul nicht angewendet werden kann, wechselt es zurück zum klassischen Round Robin Upstream oder gibt einen "Bad Gateway" zurück (abhängig vom no_fallback-Flag).
Das Sticky-Modul kann nicht angewendet werden, wenn Cookies vom Browser nicht unterstützt werden.
Das Sticky-Modul basiert auf einem "Best-Effort"-Algorithmus. Es zielt nicht darauf ab, Sicherheit auf irgendeine Weise zu behandeln. Es wurde entwickelt, um sicherzustellen, dass normale Benutzer immer an denselben Backend-Server umgeleitet werden: das ist alles!
Verwendung
upstream {
sticky;
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
}
sticky [hash=index|md5|sha1] [no_fallback]
[name=route] [domain=.foo.bar] [path=/] [expires=1h] [secure] [httponly];
oder
sticky [hmac=md5|sha1 hmac_key=<foobar_key>] [no_fallback]
[name=route] [domain=.foo.bar] [path=/] [expires=1h] [secure] [httponly];
oder
sticky [text=raw] [no_fallback]
[name=route] [domain=.foo.bar] [path=/] [expires=1h] [secure] [httponly];
Serverauswahlalgorithmus: - hash: der Hash-Mechanismus zur Kodierung des Upstream-Servers. Er kann nicht mit hmac oder text verwendet werden. Standard: md5
- md5|sha1: bekannter Hash
- index: er wird nicht gehasht, stattdessen wird ein In-Memory-Index verwendet, er ist schneller und der Overhead ist geringer
Warnung: Der Abgleich mit der Liste der Upstream-Server
ist inkonsistent. Daher sind beim Neuladen, wenn sich die Upstream-Server
geändert haben, die Indexwerte nicht garantiert
mit demselben Server wie zuvor übereinzustimmen!
VERWENDEN SIE ES MIT VORSICHT und nur, wenn Sie es benötigen!
-
hmac: der HMAC-Hash-Mechanismus zur Kodierung des Upstream-Servers Es ist wie der Hash-Mechanismus, aber es verwendet hmac_key zur Sicherung des Hashings. Er kann nicht mit hash oder text verwendet werden. md5|sha1: bekannter Hash
-
hmac_key: der Schlüssel, der mit hmac verwendet werden soll. Er ist obligatorisch, wenn hmac gesetzt ist.
-
no_fallback: Wenn dieses Flag gesetzt ist, gibt NGINX einen 502 (Bad Gateway oder Proxy-Fehler) zurück, wenn eine Anfrage mit einem Cookie kommt und das entsprechende Backend nicht verfügbar ist. Sie können es im Upstream-Block setzen oder "sticky_no_fallback" in einem Server- oder Standortblock setzen.
Cookie-Einstellungen: - name: der Name des Cookies, das zur Verfolgung des persistierenden Upstream-Servers verwendet wird; Standard: route
-
domain: die Domain, in der das Cookie gültig sein wird Standard: keine. Lassen Sie den Browser dies handhaben.
-
path: der Pfad, in dem das Cookie gültig sein wird Standard: /
-
expires: die Gültigkeitsdauer des Cookies Standard: nichts. Es ist ein Sitzungscookie. Einschränkung: muss eine Dauer von mehr als einer Sekunde sein
-
secure sichere Cookies aktivieren; nur über https übertragen
- httponly aktivieren, dass Cookies nicht über js geleakt werden
Detailmechanismus
- siehe docs/sticky.{vsd,pdf}
Probleme und Warnungen:
-
Wenn Sie verschiedene Upstream-Konfigurationen mit Stickiness verwenden, die dieselbe Domain verwenden, aber auf unterschiedliche Standortkonfigurationen verweisen, kann es sinnvoll sein, einen anderen Pfad / eine andere Route-Option für jede dieser Upstream-Konfigurationen festzulegen, wie hier beschrieben: https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/issue/7/leaving-cookie-path-empty-in-module
-
Das Sticky-Modul funktioniert nicht mit der "backup"-Option des "server"-Konfigurationselements.
- Das Sticky-Modul könnte mit dem nginx_http_upstream_check_module (ab Version 1.2.3) funktionieren.
Downloads
- Tarballs sind über Tags im Repository verfügbar: https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/downloads
GitHub
Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub Repository für nginx-module-sticky.