NGINX:sticky模块实现基于cookie的负载均衡
Sticky模块
简述:
之前公司部署了一套网站及时发布系统,架构如下图所示;Nginx做前端代理,发布系统用tomcat运行,一台共享存储,一台数据库服务器;由于网站及时发布系统涉及到了用户登录操作,要保障客户端的会话完整,用nginx自带的ip_hash进行分发,但实际生产环境下出现了问题;系统大多是公司内部编辑人员进行编辑网页时访问,出口IP都一致,Nginx会把请求分发到一台服务器上,两台服务器并没有合理分配请求资源;所以这种情况下得用到sticky模块

sticky应用场景
在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接。使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端是CDN,或者说一个局域网的客户同时访问服务器,导致出现服务器分配不均衡,以及不能保证每次访问都粘滞在同一台服务器。如果基于cookie会是一种什么情形,想想看, 每台电脑都会有不同的cookie,在保持长连接的同时还保证了服务器的压力均衡,nginx sticky值得推荐
注:如果浏览器不支持cookie,那么sticky不生效,毕竟整个模块是给予cookie实现的
编译安装
[root@wcmweb1 ~]# tar zxvf nginx-1.7.0.tar.gz ###解压nginx源代码包
[root@wcmweb1 ~]# tar zxvf nginx-sticky-module-1.1.tar.gz ###然后解压sticky模块
[root@wcmweb1 ~]# mv nginx-sticky-module-1.1 nginx-1.7.0 ###拷贝模块到nginx安装目录下
[root@wcmweb1 ~]# ./configure --prefix=/data/nginx --with-http_stub_status_module --add-module=nginx-sticky-module-1.1 ###进入安装目录编译
[root@wcmweb1 ~]# make && make install 编译安装
注:nginx-1.8版本不知为何,sticky模式启用后,浏览器刷新后经常出现不稳定状况,会让用户重新登录
下载地址-》》https://pan.baidu.com/s/1hskFPDM
注意事项
nginx-1.5.x和nginx-sticky-module-1.1编译会有点问题,应该是nginx新版本没有相应的nginx-sticky-module
解决办法是把nginx-sticky-module-1.1/ngx_http_sticky_misc.c的281行修改为:
digest->len = ngx_sock_ntop(in,sizeof(struct sockaddr_in), digest->data, len, 1);
由于编译需要,编译安装Nginx之前,要先安装openssl yum -y install openssl-devel
Nginx配置文件
省略.....................
upstream backserver {
sticky;
server 192.168.x.xx:8080;
server 192.168.x.xx:8080;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log logs/host.access.log main;
location ~* ^(.*)$ {
#limit_req zone=allips burst=1 nodelay;
proxy_pass http://backserver;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 8m;
}
省略................
}
重新启动nginx服务 nginx-sticky-module的cookie过期时间,默认浏览器关闭就过期,也就是会话方式
NGINX:sticky模块实现基于cookie的负载均衡的更多相关文章
- 使用nginx sticky实现基于cookie的负载均衡
在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接.使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端 ...
- 使用nginx sticky实现基于cookie的负载均衡【转】
在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接.使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端 ...
- Nginx基于TCP的负载均衡的配置例子
原文:https://blog.csdn.net/bigtree_3721/article/details/72833955 nginx-1.9.0 已发布,该版本增加了 stream 模块用于一般的 ...
- Nginx sticky模块实现session粘滞
一:下载,解压nginx sticky模块. 1 2 3 # cd /usr/local/src # wget http://nginx-sticky-module.googlecode.com/fi ...
- 实现基于Haproxy+Keepalived负载均衡高可用架构
1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...
- 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?
本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言 Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...
- nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录
在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...
- Nginx服务器的使用与反向代理负载均衡
目录 Nginx服务器 一:什么是Nginx? 什么是Nginx - Nginx与其他服努器的性能比较 二:如何在Linux中搭建Nginx服务器? 常见的错误 三:Nginx的反向代理和负载均衡 什 ...
- 通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布
前提 前段时间顺利地把整个服务集群和中间件全部从UCloud迁移到阿里云,笔者担任了架构和半个运维的角色.这里详细记录一下通过Nginx.Consul.Upsync实现动态负载均衡和服务平滑发布的核心 ...
随机推荐
- 延迟是AR/VR体验的基础
原文: http://blogs.valvesoftware.com/abrash/latency-the-sine-qua-non-of-ar-and-vr/ 译者注: 原文发表于2012年, 尽管 ...
- Linux上Nginx部署配置--二级域名配置
http://www.cnblogs.com/yaunion/archive/2013/03/16/2962385.html http://blog.csdn.net/LBinin/article/d ...
- 一些laravel博文
人比人比死人系列 https://www.insp.top/tag/laravel http://www.iwanli.me/
- 批处理bat文件dos命令复制文件
::将“C:\Users\ZZ\Desktop\快捷处理\我我我哦我”路径下的文件复制到“C:\Temp\我我我哦我”路径下::/S表示“复制目录和子目录,除了空的.”::/E表示“复制目录和子目录, ...
- [转载]Linux I/O 调度方法
http://scoke.blog.51cto.com/769125/490546 IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以 ...
- MFC-TCP连接代码片段(支援大富的)
BOOL CClientSocketTestDlg::OnInitDialog() { CDialogEx::OnInitDialog(); ........................ // T ...
- excel——之锁定表头不可编辑
前言: 设置excel表头不可编辑功能.效果如下: 这就意味着,不可随意更改表头数据,除非你有密码. 过程: 1.先随意右键打开一个单元格,查看其中的“设置单元格属性”,即 2.在选中想要编辑的那些数 ...
- jq的clone用第二次的时候为什么会复制clone出来的元素(即一变二,二变四)
原因是clone得到的是一个数组吗,每次再clone的时候,相当于操作了这个数组,肯定就会出现重复,我们只需要取第一个值就可以了,用.first()的方法 jquery(‘item‘).first() ...
- jQUery中closest和parents的主要区别是
①,前者从当前元素开始匹配寻找,后者从父元素开始匹配寻找: ②,前者逐级向上查找,直到发现匹配的元素后就停止了,后者一直向上查找直到根元素,然后把这些元素放进一个临时集合中,再用给定的选择器表达式去过 ...
- php查询操作实现投票功能
这篇文章主要为大家详细介绍了php查询操作实现投票功能的具体代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了php查询操作实现投票功能的代码,供大家参考,具体内容如下 ...