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的负载均衡的更多相关文章

  1. 使用nginx sticky实现基于cookie的负载均衡

    在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接.使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端 ...

  2. 使用nginx sticky实现基于cookie的负载均衡【转】

    在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接.使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端 ...

  3. Nginx基于TCP的负载均衡的配置例子

    原文:https://blog.csdn.net/bigtree_3721/article/details/72833955 nginx-1.9.0 已发布,该版本增加了 stream 模块用于一般的 ...

  4. Nginx sticky模块实现session粘滞

    一:下载,解压nginx sticky模块. 1 2 3 # cd /usr/local/src # wget http://nginx-sticky-module.googlecode.com/fi ...

  5. 实现基于Haproxy+Keepalived负载均衡高可用架构

    1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...

  6. 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?

    本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言   Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...

  7. nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录

    在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...

  8. Nginx服务器的使用与反向代理负载均衡

    目录 Nginx服务器 一:什么是Nginx? 什么是Nginx - Nginx与其他服努器的性能比较 二:如何在Linux中搭建Nginx服务器? 常见的错误 三:Nginx的反向代理和负载均衡 什 ...

  9. 通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布

    前提 前段时间顺利地把整个服务集群和中间件全部从UCloud迁移到阿里云,笔者担任了架构和半个运维的角色.这里详细记录一下通过Nginx.Consul.Upsync实现动态负载均衡和服务平滑发布的核心 ...

随机推荐

  1. [转]查看处于被锁状态的表:v$locked_object dba_objects v$session all_objects v$sqlarea v$lock

    oracle官网当一个用户发出select..for update的错作准备对返回的结果集进行修改时,如果结果集已经被另一个会话锁定,就是发生阻塞.需要等另一个会话结束之后才可继续执行.可以通过发出 ...

  2. 浅谈cookie测试

    Cookie 提供了一种在Web 应用程序中存储用户特定信息的方法,例如存储用户的上次 访问时间等信息.假如不进行cookie存储一个网站的用户行为,那么可能会造成以下问题:用户进行购买几件商品转到结 ...

  3. 如何在ChemDraw中绘制分子立体结构

    ChemDraw是当前最常用的的化学结构绘图软件,软件功能包括化学作图.分子模型生成.化学数据库信息管理等,可以说是化学家和生物学家所需要最终极的化学结构绘图工具.本教程主要介绍ChemDraw绘制分 ...

  4. 怎么输入MathType不等号

    MathType是一款比较常用的数学公式编辑器,我们在使用这款软件的时候常常需要输入各种符号.有些新用户对这款软件不是很熟悉,对于一些符号不知道怎么输入,下面我们来给大家介绍介绍MathType不等号 ...

  5. BaiduMap 鼠标绘制矩形选框四个顶角坐标的获取

    雪影工作室版权全部.转载请注明[http://blog.csdn.net/lina791211] 1.博文产生原因 在使用百度Map开放API进行开发的时候,遇到了一个需求,非常easy的一个需求. ...

  6. quick-cocos2d-x游戏开发【10】——触摸捕获事件 cc.NODE_TOUCH_CAPTURE_EVENT

    假设看过sample中touch的代码,你会发现演示样例中有一个cc.NODE_TOUCH_CAPTURE_EVENT事件.它和cc.NODE_TOUCH_EVENT触摸事件一样,是引擎级别的事件,我 ...

  7. shell基础(六)--字符串和数组

    对文本处理,单独用shell来处理还是比较薄弱.所以shell就引用了awk and sed这两个命令.我们今天不说这个 一 字符串  字符串是shell编程中最常用最有用的数据类型,因为你定义一个变 ...

  8. 如何让IOS中的文本实现3D效果

    本转载至 http://bbs.aliyun.com/read/181991.html?spm=5176.7114037.1996646101.25.p0So7c&pos=9       zh ...

  9. C++异常 调用abort()

    以一个计算两个数的调和平均数的函数为例.两个数的调和平均数的定义是:这两个数倒数的平均值的倒数,因此表达式为:1.0 * x * y / (x + y)如果y是x的负值,则上述公式将导致被零除——一种 ...

  10. Android 使用WebView显示网页

    构建WebView就可以显示Web信息.因为我觉得这里会讲述很多方式来实现WebView,所以我决定为每一种方式创建一个对应的Activity,MainActivity通过Button可以点击进入对应 ...