在Apache和Nginx中实现StickySession功能
当我们使用负载均衡,后端对应多台Server,而且使用了单机Session的
如果不进行配置,可能会发生丢Session的问题,因为前端Nginx可能会随机分发Request请求
Aapache已经提供了stickysession的功能,前端Apache2的配置如下:
ProxyPassMatch ^/(.*)$ balancer://vip stickysession=STICKY_HOST
ProxyPassReverse / balancer://vip
<Proxy balancer://vip>
BalancerMember http://192.168.x.x smax=5 max=20 ttl=120 retry=30 route=159
BalancerMember http://192.168.x.x smax=5 max=20 ttl=120 retry=30 route=160
</Proxy>
它是依赖Cookie来实现route的,需要在后端的Apache2上设置相应的Cookie值:
RewriteEngine On
RewriteRule .* - [CO=STICKY_HOST:host.159:.xxx.test.com]
Nginx上也可以实现这样的机制,配置如下:
set $serverid $cookie_STICKY_HOST;
if ($serverid ~ ^host.159$)
{
proxy_pass http://192.168.x.x;
}
if ($serverid ~ ^host.160$)
{
proxy_pass http://192.168.x.x;
}
Nginx还提供了一个ip_hash的指令,可以根据ip来分发请求
也可以实现StickySession的功能,使用很简单:
upstream mail_pop
{
ip_hash;
server 10.x.x.x:83;
server 10.x.x.x:83;
}
N久之前在U盘的时候的原理和这个是相似的么??
是一样的,呵呵