当我们使用负载均衡,后端对应多台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;
}