On 2015-07-29 12:56, Budulianin wrote:
Может знаете какие-то книги/форумы/статьи на тему маршрутизации и правильных
подходов/принципов?
Интересно почитать.
Правильно так:
http://nginx.org/ru/docs/http/ngx_http_upstream_module.html#sticky

Но если купить коммерческую подписку по тем или иным причинам невозможно, придётся внешним монтажом:

или ставить за nginx'ом haproxy и писать в нём нечто эдакое:
listen fe 127.0.0.1:9876
balance     leastconn
appsession  JSESSIONID len 52 timeout 1h
server      be1 192.168.169.170:8989 check
server      be2 192.168.169.171:8989 check

или самим nginx'ом сделать то же самое:
# случайный выбор бакенда
upstream rndbackend {
  server 192.168.169.170;
  server 192.168.169.171;
}

# выбор бакенда на основании куки backend
map $cookie_backend $sticky_backend {
  default BAD_GATEWAY;
  ~(?<IP>[0-⁠9.]+$)    $IP;
}

server {
  listen 80;

  # если приехала кука, выбираем бакенд согласно её значению
  location /⁠ {
    proxy_pass http://$sticky_backend;
    error_page 502 = @random_backend;
  }

  # если куки нет, выбираем бакенд случайно и выставляем куку
  location @random_backend (
    proxy_pass http://rndbackend;
    add_header Set-⁠Cookie "backend=$upstream_addr; path=/⁠";
}


_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить