zoukankan      html  css  js  c++  java
  • Session Sticky About Nginx

    Nginx以前对session 保持支持不太好,主要采用ip_hash把同一来源的客户(同一C段的IP)固定指向后端的同一台机器,ip_hash有个缺点是不能实现很好的负载均衡;直到nginx的扩展模块nginx-sticky-module的出现,解决了session sticky的问题。

    基本的原理:

    首先根据轮询RR随机到某台后端,然后在响应的Set-Cookie上加上route=md5(upstream)字段,第二次请求再处理的时候,发现有route字段,直接导向原来的那个节点。

    配置说明:

    upstream cluster_test {

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

       server 192.168.100.209:80;

       server 192.168.100.225:80;

    }

    name: 可以为任何的string字符,默认是route

    domain:哪些域名下可以使用这个cookie

    path:哪些路径对启用sticky,例如path/test,那么只有test这个目录才会使用sticky做负载均衡

    expires:cookie过期时间,默认浏览器关闭就过期,也就是会话方式。

    no_fallbackup:如果设置了这个,cookie对应的服务器宕机了,那么将会返回502(bad gateway 或者 proxy error),建议不启用。

    Nginx编译

    添加nginx_upstream_check_module

    unzipnginx_upstream_check_module-master.zip

    tar -zxf nginx-1.5.6.tar.gz

    cd nginx-1.5.6

    patch -p1 <../nginx_upstream_check_module-master/check_1.2.6+.patch

    添加nginx-sticky-module,编译安装Nginx

    tar -xzf nginx-sticky-module-1.1.tar.gz

    cd nginx-1.5.6

    ./configure--prefix=/opt/lsmp/3rdparty/nginx/1.5.6 --with-http_stub_status_module--with-http_ssl_module --with-openssl=../openssl-1.0.1c--with-http_realip_module --add-module=../nginx-sticky-module-1.1--add-module=../nginx_upstream_check_module-master

    make

    make install

    注意事项

    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

    nginx-sticky-module的cookie过期时间,默认浏览器关闭就过期,也就是会话方式。

  • 相关阅读:
    发红包案列——继承和集合
    抽象类
    方法重写
    继承——访问成员变量,访问成员方法,访问构造方法
    js异步计时器
    栈(stack)和堆(heap)
    高并发和多线程概念
    集群、负载均衡、分布式、微服务
    Redis性能监控
    Redis配置
  • 原文地址:https://www.cnblogs.com/Fly-sky/p/sessionsticky.html
Copyright © 2011-2022 走看看