成功最有效的方法就是向有经验的人学习!

基于Sticky会话保持

nginx会话保持nginx-sticky-module模块
在使用负载均衡的时候会遇到会话保持的问题,常用的方法有:
– ip hash,根据客户端的IP,将请求分配到不同的服务器上;
– cookie,服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发布者,注意:cookie需要浏览器支持,且有时候会泄露数据
– 基于服务端的Session会话共享(mysql/memcache/redis)

Sticky工作原理:

Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route
1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
2.后端服务器处理完请求,将响应数据返回给nginx。
3.此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
4.客户端接收请求,并保存带route的cookie。
5.当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。

模块下载地址:

https://github.com/bymaximus/nginx-sticky-module-ng
wget https://github.com/bymaximus/nginx-sticky-module-ng/archive/master.zip

编译时加上--add-module=/tmp/nginx-sticky-module-ng-master (这里的路径使用模块的实际路径),如果是升级nginx,直接在原来的编译参数后加上即可。

有关nginx平滑升级请参考:https://www.gl.sh.cn/2019/05/22/tian_jia_nginx_mo_kuai_sheng_ji_nginx.html

Sticky配置的语法

sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] 
       [hash=index|md5|sha1] [no_fallback] [secure] [httponly];

name:用户跟踪cookie的名称:默认是route
domain:cookie有效的域,默认的值是nothing,对哪个域生效
cookie:缓存在客户端上的有效期
hash:cookie利用那种方式生成,index|md5|sha1
no_fallbask:当设置的时候,如果请求附带cookie并且相应的后端不可用,这Nginx返回502错误
secure:启用安全的cookie,仅能通过https传输
httponly:使cookie不会通过js(脚本)泄露

配置实例

upstream blog {
    sticky  name=guilin expires=1h domain=.ct99.cn hash=md5 secure path=/;
    server 192.168.1.5;
    server 192.168.1.6;
}
// 只需要在upsteram里面加上sticky即可

此时再次请求网站时,会多一个cookie信息

赞(0) 打赏
未经允许不得转载:陈桂林博客 » 基于Sticky会话保持
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册