Nginx负载均衡服务器实现会话粘贴的几种方式

1、 使用Nginx 的ip_hash作为负载均衡服务并支持Session sticky  

2、 使用nginx sticky第三方模块实现基于cookie的负载均衡

3、使用nginx的map指令根据cookie分流:

map $COOKIE_abcdexpid $group {
  ~*1$	apache001;
  ~*2$	apache002;
  default	root;
}
 
upstream apache001 {
  server 192.168.1.1:8080 weight=1 max_fails=1 fail_timeout=30s;
}
 
upstream apache002 {
  server 192.168.1.2:8080 weight=1 max_fails=1 fail_timeout=30s;
}
 
upstream root {
  server 192.168.1.0:8080 weight=1 max_fails=1 fail_timeout=30s;
}
 
server {
  listen       8080;
  server_name  neoremind.net;
 
  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
            '$status $body_bytes_sent "$http_referer" "group=$group"'
            '"$http_user_agent" $gzip_ratio $request_time "$http_x_forwarded_for"';
 
  access_log  logs/access_log main;
  error_log   logs/error_log;
 
  location / {
        proxy_pass http://$group;
    proxy_set_header X-Forwarded-For $remote_addr;
    }	
}

4、 利用set和if…else…   根据cookie分流

upstream apache001 {
  server 192.168.1.1:8080 weight=1 max_fails=1 fail_timeout=30s;
}
 
upstream apache002 {
  server 192.168.1.2:8080 weight=1 max_fails=1 fail_timeout=30s;
}
 
upstream root {
  server 192.168.1.0:8080 weight=1 max_fails=1 fail_timeout=30s;
}
 
server {
  listen       8080;
  server_name  beidoutest.baidu.com;
 
  #match cookie
  set $group "root";
  if ($http_cookie ~* "abcdexpid=([^;]+)(1$)"){
    set $group apache001;
  }
  if ($http_cookie ~* "abcdexpid=([^;]+)(2$)"){
    set $group apache002;
  }
 
  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
            '$status $body_bytes_sent "$http_referer" "group=$group"'
            '"$http_user_agent" $gzip_ratio $request_time "$http_x_forwarded_for"';
 
  access_log  logs/access_log main;
  error_log   logs/error_log;
 
  location / {
    proxy_pass http://$group;
    proxy_set_header X-Forwarded-For $remote_addr;
  }
 
}

5、nginx1.7.2版本后提供的hash方法:

# http context  
upstream backend_hosts {      
hash $cookie_jsessionid consistent;      
server host1.example.com;     
server host2.example.com;     
server host3.example.com; 

}