| From | Sent On | Attachments |
|---|---|---|
| Grzegorz Nosek | Feb 22, 2010 7:57 am | |
| Piotr Sikora | Feb 22, 2010 8:14 am | |
| Grzegorz Nosek | Feb 22, 2010 8:18 am |
| Subject: | Best-effort sticky sessions | |
|---|---|---|
| From: | Grzegorz Nosek (grze...@gmail.com) | |
| Date: | Feb 22, 2010 7:57:11 am | |
| List: | ru.sysoev.nginx | |
Hi all,
I'm trying to implement sticky sessions with Nginx 0.7.65 (basically vanilla, regarding HTTP support) and I need something better than ip_hash. When a backend is reported as down (the haproxy that Nginx is proxying to seems to behave strangely even though the load is rather low), an ip_hash upstream tries the other backend (I have just two configured). This caused dropped sessions and lost attachments (it's a rather busy webmail application). We now keep sessions in memcached so the problem is not as severe but there is still the risk of misdirecting traffic. Sharing the attachment area is currently out of the question so please refrain from suggesting that :)
What I'd like to have would look roughly like this (apart from completely not working):
upstream up1 { server sv1:9000; server sv1:9000; # try again (and possibly again...) server sv2:9000; # and finally fail over to the other server }
upstream up2 { server sv2:9000; server sv2:9000; # try again (and possibly again...) server sv1:9000; # and finally fail over to the other server }
upstream default { server sv1:9000; # round-robin (or ip_hash, or just about server sv2:9000; # anything) }
map $cookie_serverid $upstream { sv1 up1; sv2 up2; default default; }
map $upstream_addr $serverid { # $upstream_addr contains a sorted ", "-separated list of # configured backends (ip:port), rendering it completely useless # for my nefarious plans # I'd have expected ip:port of the final chosen backend here sv1:9000 sv1; sv2:9000 sv2; }
location / { fastcgi_pass $upstream; # using a $variable makes fastcgi_pass # expect ip:port, apparently add_header Set-Cookie serverid=$serverid; }
So, without some deep sourcery (which I'd rather avoid), can I have sticky sessions with Nginx trying really hard to avoid other backends? I guess I could hack something together with the embedded Perl module...
Best regards, Grzegorz Nosek
_______________________________________________ nginx mailing list ngi...@nginx.org http://nginx.org/mailman/listinfo/nginx





