<< 提升tomcat服务器性能的七条经验 | 首页 | 图灵社区 : 图书 : 一步步搭建物联网系统 >>

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; 

             } 

 




发表评论 发送引用通报