nginx ip_hash和session_sticky

最近配置nginx,在轮询策略中有一个session_sticky的session绑定配置,这个和ip_hash有什么区别了,还是说是同一种东西,只是ip绑定的实现方式不同,而结果一样了。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇文章:解决 nginx 反向代理时 session 丢失 无效的问题 也许能够解决你的问题,你可以看下
  • 除此之外, 这篇博客: nginx负载均衡、负载均衡策略/方式(轮询、权重、ip_hash)session共享问题中的 2.1.1轮询 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    依次按照顺序访问后端的每一个服务器,按照这个计算,相当于平均分配请求给所有集群节点--物理均衡。

    • 准备一个upstream的虚拟域名,保管后端服务器的详细信息
      //定义后台服务器的信息,list列表
      upstream ouservers {
           server 127.0.0.1:8093;
           server 127.0.0.1:8093;
           server 127.0.0.1:8293;
      }

      upstream的配置,会在nginx启动时加载成为一个内存的list对象

           元素有3个分别是8093 8193 8293,负载均衡的计算都是通过这个list完成的

    • 在server中使用proxy_pass指向这个新创建的upstream名称ouservers,如果找到该proxy_pass,nginx会进行替换。
    //案例   www.pp.com 访问nginx
    //让nginx处理这个请求
    server {
        listen 80;
        server_name www.pp.com;
        //正则表达式,匹配当前所有静态资源路径
        location / {
        root static;
        //默认使用首页,如果使用/ 在访问时,可以添加默认首页
        index index.html;
        }
        location /user {
        //实现转发功能,请求转发给后端8093 root是静态数据,proxy_pass动态数据
        proxy_pass http://ouservers;
        }
        location /order {
        //实现转发功能,请求转发给后端8093 root是静态数据,proxy_pass动态数据
        proxy_pass http://ouservers;
        }
        location /hello {
        proxy_pass http://ouservers;
        }
    }
    • 测试轮询

    保存nginx.conf文件,重新加载/重新启动,即在nginx家目录总执行nginx -s reload

    访问:http://www.pp.com/hello?name=王翠花

    • 流程分析

    请求地址:http://www.pp.com/hello

    |进入nginx

    |找到server

    |匹配location /hello

    |proxy_pass ouservers

    |找到upstream中叫做ouservers的list列表

    |从中计算轮询算法,拿到一个具体的服务器 127.0.0.1:8093

    |将proxy_pass ouservers替换掉

    响应地址:http://localhost:8093(8193/8293)/hello


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^