Vraag Kleverige sessies met Nginx-proxy


Ik heb een toepassing die op twee verschillende AWS-instanties wordt uitgevoerd en ik wil "plakkerige" of "persistente" sessies inschakelen op basis van IP, zodat ik op een bepaalde manier gebruik kan maken van web-sockettechnologieën.

Ik heb twee verschillende setups die beide betrekking hebben op het gebruik ip_hash om deze plakkerige sessies mogelijk te maken.

In de eerste configuratie worden de app-processen uitgevoerd op dezelfde instantie als de Nginx-configuratie. Dit is werkend, de sessies zijn persistent zoals verwacht.

upstream my_app {
    ip_hash;
    # local servers
    server 127.0.0.1:3001 weight=100 max_fails=5 fail_timeout=300;
    server 127.0.0.1:3002 weight=100 max_fails=5 fail_timeout=300;
    keepalive 8;
}

In de tweede opstelling wijs ik naar externe instanties en probeer ik hetzelfde effect te bereiken. Deze opstelling is werkt niet. Met andere woorden, de sessies worden nog steeds uitgebalanceerd.

upstream my_app {
    ip_hash;
    # external servers
    server 111.11.11.11:3001 weight=100 max_fails=5 fail_timeout=300;
    server 222.22.22.22:3002 weight=100 max_fails=5 fail_timeout=300;
    keepalive 8;
}

Gebruik ik ip_hash correct? Hoe kan ik "plakkerige" ip-gebaseerde sessies voor externe servers activeren?


6
2018-02-15 21:34


oorsprong


Heeft uw Nginx "ngx_http_upstream_module" geïnstalleerd? Ik weet niet of het standaard is opgenomen of niet. "nginx -V" geeft meestal modules weer waarmee het is gebouwd. De mijne (opgebouwd uit bron) vermeldt het niet - Tim


antwoorden:


Volgens Nginx-documentatie is Sticky session-ondersteuning alleen beschikbaar voor hun dure Plus-versie. Ik heb alternatieven onderzocht en hoe dichterbij ik ben geweest, is deze oude vork die niet compatibel is met Nginx 1.5+ https://github.com/lusis/nginx-sticky-module

Ik heb ook geprobeerd om een ​​LUA-module te bouwen, maar er zijn geen API-hooks voor peer-selectie, alleen voor opsomming en blokkering.

Nginx Plus Load Balancing

Bijwerken

Ik heb een andere geweldige module gevonden, zie https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src


5
2018-03-22 19:55



Kunt u naar deze documentatie linken? - James Shewey


Mijn server stond achter AWS load balancing, dus ik moest de juiste headers doorgeven om stroomopwaarts te maken, zodat het altijd het IP-adres van de client zou weerspiegelen. De volgende configuratie loste mijn probleem op (zie de regel met commentaar):

upstream my_app {
    ip_hash;
    server 111.11.11.11:3001 weight=100 max_fails=5 fail_timeout=300;
    server 222.22.22.22:3002 weight=100 max_fails=5 fail_timeout=300;
    keepalive 8;
}

server {
    server_name my-app.com;

    location / {
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_set_header X-Real_IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        # This is necessary to pass the correct IP to be hashed
        real_ip_header X-Real-IP;

        proxy_pass http://my_app/;
        proxy_redirect off;
    }
}

1
2018-02-15 23:05