HTTP Persistence
目录 |
HTTP Persistence
概要
一些使用负载均衡功能的网站会要求属于同一会话的请求必须交付给相同的服务器,使用persistence模块就可以实现这一功能。
persistence模块必须与负载均衡模块配合使用,一个新的请求到来时,负载均衡算法将其交付给服务器A,这样就建立了一个会话;当这个会话的下一个请求到来时,由persistence模块仍然将请求交付给A,这样就保证了同一会话的请求不会交付给不同的服务器。
persistence有三种标识会话的方式供用户选择:
- 插入HTTP cookie来标识会话
- 监听现有会话的cookie来标识会话
- 基于session功能来标识会话
命令
persistence
语法 | persistence mode [cookie_name=name] [monitor_cookie=name] [timeout=timeout] |
上下文 | upstream |
开启persistence功能。mode有insert_cookie和session_based两种,分别对应 插入cookie的会话保持 和 基于session的会话保持 两种模式,其中插入cookie会话保持分成直接插入cookie和监控已有cookie再插入新cookie两种。
timeout的单位为分钟。
示例:
直接插入cookie:
upstream pool1 { persistence insert_cookie cookie_name=senginxforward timeout=30; server 192.168.1.101; server 192.168.1.102; }
监控已有cookie插入新cookie:
upstream pool1 { persistence insert_cookie cookie_name=senginxforward monitor_cookie=JSESSIONID timeout=30; server 192.168.1.101; server 192.168.1.102; }
基于session机制:
upstream pool2 { least_conn; persistence session_based; server 192.168.1.101; server 192.168.1.102; } server { session on; ... ... proxy_pass http://pool2; }
原理
直接插入HTTP cookie
在新的请求到来时persistence模块在其响应中设置"Set-Cookie"头,使客户端浏览器设置包含server信息的特定cookie;这个浏览器发送下一个请求时会携带这个cookie,根据它persistence模块会将请求转发到之前的服务器。
监听现有cookie插入cookie
在服务器已经设置cookie标识会话的情况下,persistence模块再添加包含server信息的特定cookie;在服务器设置的cookie存在时persistence功能才会有效。
基于session机制进行会话保持
SEnginx的某个server在开启session功能的情况下,persistence模块会基于session中记录的信息进行会话保持。在这种情况下,persistence的超时时间和session的超时时间相同