sticky介绍

sticky模块与Ip_hash都是与负载均衡算法相关,但又有差别,差别是

1.ip hash,根据客户端的IP,将请求分配到不同的服务器上
2.sticky,根据服务器给客户端的cookie,客户端再次请求时会带上此cookie,nginx会把有此cookie的请求转发到颁发cookie的服务器上

sticky原理

Sticky是基于cookie的一种负载均衡解决方案,通过分发和识别cookie,使来自同一个客户端的请求落在同一台服务器上,默认cookie标识名为route :

1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
2.后端服务器处理完请求,将响应数据返回给nginx。
3.此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值。
4.客户端接收请求,并保存带route的cookie。
5.当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。

sticky官网

官方地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src 下载地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz

注意点

1.同一客户端,如果启动时同时发起多个请求,有可能落在不同的后端服务器上。
2.由于cookie最初由服务器端下发,如果客户端禁用cookie,则cookie不会生效。
3.客户端可能不带cookie,Android客户端发送请求时,一般不会带上所有的cookie,需要明确指定哪些cookie会带上。如果希望用sticky做负载均衡,请对Android开发说加上cookie。
4.cookie名称不要和业务使用的cookie重名。Sticky默认的cookie名称是route,可以改成任何值
5.客户端发的第一个请求是不带cookie的。服务器下发的cookie,在客户端下一次请求时才能生效。
6.Nginx sticky模块不能与ip_hash同时使用

Nginx安装Sticky模块

如果你还没有部署Nginx,那么就在部署Nginx的时候进行 --add-module 添加上此模块就行了,我这里是Nginx已经安装过了,需要再把此模块加载进NGINX

1.下载sticky

wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz
tar xf master.tar.gz#把此模块放进nginx/module目录下,名称太长,重命名一下
mkdir /usr/local/nginx/module
mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42 /usr/local/nginx/module/nginx-sticky-module

2.重新编译NGINX
下载一个NGINX后重新解压,然后看之前NGINX编译了那些模块,这里都给加上,在最后加上 --add-module载入sticky模块

tar xf nginx-1.16.1.tar.gz
cd nginx-1.16.1
./configure --prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/usr/local/nginx/run/nginx.pid \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--with-pcre \
--user=nginx \
--group=nginx \
--with-stream \
--with-threads \
--with-file-aio \
--with-http_v2_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--add-module=/usr/local/nginx/module/nginx-sticky-module            #在此载入sticky模块#./configure完后进行编译,然后更换 nginx 程序
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
cp -rf objs/nginx /usr/local/nginx/sbin/#最后再 make upgrade 进行更新检测
[root@nginx_proxy02 nginx-1.16.1]# make upgrade
/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
kill -USR2 `cat /usr/local/nginx/run/nginx.pid`
sleep 1
test -f /usr/local/nginx/run/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx/run/nginx.pid.oldbin`

以上就完成了Nginx载入第三方模块,使用 nginx -V 来查看是否载入成功

3.修改NGINX配置文件 修改NGINX配置文件来启用sticky

upstream backend {sticky name=ngx_cookie expires=6h;server 192.168.31.240:8080 weight=3 max_fails=3 fail_timeout=10s;server 192.168.31.241:8080 weight=3 max_fails=3 fail_timeout=10s;server 192.168.31.242:8080 weight=6 max_fails=3 fail_timeout=10s;server 192.168.31.243:8080;server 192.168.31.244:8080 down;
}
mkdir /usr/local/nginx/ngx_cookie

4.sticky语法解析

5.重启NGINX

/usr/local/nginx/sbin/nginx -s reload

测试访问NGINX

第一次访问的时候是没有Cookie的,访问完成后NGINX才会把Cookie包含在返回的数据中,在下次请求数据的时候就会出现Cookie。所以刷新一下后才能看到Cookie。

参考链接 :
Nginx 基于nginx-sticky-module模块进行会话保持 :https://mp.weixin.qq.com/s/qp0O4I_K1OrUwCnVs1B8oA

Nginx 基于nginx-sticky-module模块进行会话保持相关推荐

  1. 基于nginx实现缓存功能及uptream模块详细使用方法

    基于nginx实现缓存功能及uptream模块详细使用方法 一般情况下,前端使用nginx做代理或7层负载并向后实现varish/squid做cache server的效果要好的多 nginx与squ ...

  2. 基于Nginx模块搭建直播服务

    转载请标明出处: https://blog.csdn.net/u014214308/article/details/82698542 直播技术原理: 客户端(A:主播,推流)通过摄像头采集到视频数据, ...

  3. NGINX基于Tomcat配置负载均衡

    NGINX基于Tomcat配置负载均衡 本部署指南说明了如何使用NGINX开源和NGINX Plus在Apache Tomcat TM应用程序服务器池之间平衡HTTP和HTTPS流量.本指南中的详细说 ...

  4. 基于nginx tomcat redis分布式web应用的session共享配置

    一.前言 nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存.web server负载均衡等功能,由于其轻量级.高性能.高可靠等特点在互联网项目中有着非常普遍的应用,相关 ...

  5. 部署haproxy代理,搭建基于nginx的高性能反向代理群集

    目录 一.Haproxy概述.简介 (1)Haproxy简介 (2)Haproxy和LVS.Nginx的比较 (3)Haproxy的代理模式 二.利用Haproxy+nginx搭建web群集 实验环境 ...

  6. nginx服务(六)_常用模块的配置使用

    访问控制模块 日志模块 压缩模块 ssl模块 升级opensll版本 访问控制模块 ngx_http_access_module模块:实现基于ip的四层访问控制功能 1.allow address | ...

  7. nginx 基础配置和常用模块

    这两天在看nginx的东西,下面是学习过程中学习到东西,贴了出来若有哪里不对请大家给予指正. 一:nginx安装: ./configure --prefix=/usr/local/nginx/  ma ...

  8. Nginx research, nginx module development

    catalog 1. 初探nginx架构 2. handler模块 3. Nginx编译.安装.配置 4. Hello World模块开发 1. 初探nginx架构 nginx在启动后,在unix系统 ...

  9. Nginx下安装配置PageSpeed模块,轻松完成网站提速

    2019独角兽企业重金招聘Python工程师标准>>> 作为Nginx组件,ngx_pagespeed将重写你的网页,让用户以更快的速度进行访问.重写的工作包括压缩图片.缩减CSS和 ...

最新文章

  1. 随机从mysql中读取_如何实现MySQL表数据随机读取?从mysql表中读取随机数据
  2. 从syslinux源码定制LiveUSB
  3. 每天学习一点,坚持学习!!
  4. SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载)
  5. java中时间入数据库格式转换_数据库中字段类型为datetime,转换成java中的Date类型...
  6. leetcode 刷题指南
  7. EventBus的基本使用步骤
  8. autojs多分辨率找透明图
  9. 司空见惯 - 会议室名称
  10. Java Drool规则引擎
  11. 谁是小米真正的友商——小米中国受让专利来源分析
  12. Android应用实现开机自启动
  13. 海康威视摄像头密码重置方法
  14. 为 windows cmd 设置代理
  15. Linux下配置JSHOP2环境
  16. 英语作文计算机的利弊,电脑游戏的坏处英语作文
  17. 软件测试之linux——自动化
  18. 数据库内容:园林中级支撑题库软件开发内容
  19. vba 判断文本框内容是否为空_VBA代码用SetFocus精确控制焦点事件
  20. 移动硬盘安装Kali所碰到到问题

热门文章

  1. 连接显示器与计算机主机的接口电路是,液晶显示器VGA模拟输入接口电路
  2. vc sleep不占进程_Python 中的进程深入
  3. loss函数之L1Loss,MSELoss,SmoothL1Loss, HuberLoss
  4. 输出高电平程序c语言,51用c语言怎么编程检测US-100超声波测距模块echo/rx引脚输出高电平时间长度,,谁能给我个模板...
  5. boost::asio async_write也不能保证一次发完所有数据 一
  6. C++ ------------------------- 文件的复制
  7. js的一些function
  8. Java将每半年发布一个版本
  9. Tomcat中文乱码解决办法
  10. Linux shell编程中read参数说明