美文网首页
nginx实现根据cookie分流

nginx实现根据cookie分流

作者: hybzzz | 来源:发表于2018-05-21 10:27 被阅读437次

0.环境:centos7.2,tomcat8.5*2 ,nginx1.0.13

0-1:起因,由于上线不能影响用户使用,起初使用ip分流,但是有些情况无法获取ip,故查到可以用cookie做分流,这样一来,可以给客户以及测试人员分配角色 ,根据角色设置cookie,再根据cookie实现分流,便可实现上线不影响现网使用。

1.nginx配置

      upstream nttest{
        #       server 127.0.0.1:38080;
                server 127.0.0.1:39090;

        }
        upstream nttest1{
                server 127.0.0.1:38080;
        }
 location ^~ /web/ {
             set $group nttest;
              if ($http_cookie ~* "hyb_test") {
                         set $group nttest1;
              }
             proxy_redirect              off;
             proxy_set_header            Host $host;
             proxy_set_header            X-real-ip $remote_addr;
             proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
             index index.html index.htm;
             proxy_pass http://$group;
 }

即,声明2个upstream,分别指向tomcat1和2,当路径匹配到web,设置变量group为nttest节点,判断cookie,如果cookie带有hyb_test,则设置变量group为nttest1节点,将请求代理到group。

2测试用例准备

index.jsp
 @RequestMapping("/login")
    public String login2(String username,String password, HttpServletRequest req, HttpServletResponse resp){
        if("hyb".equals(username)){
            Cookie cookie = new Cookie("hyb_test_username",username);
            cookie.setPath("/");
//            cookie.setDomain("domain");
            resp.addCookie(cookie);
        }
        return "success";
    }
跳转页面
将项目拉到2个tomcat,修改2.jsp内容即可,比如我将nttest1下的2.jsp修改为 image.png

3测试分流

分别启动tomcat1,tomcat2,正常启动后访问index.jsp


index

因为没做登陆校验,直接点登陆即可,另开一个窗口,用hyb做用户名登陆,如图


image.png
分别点击登陆, image.png

hyb已经成功访问到nttest1,而其他登陆则访问了nttest,分流成功!

再看cookie image.png image.png

相关文章

网友评论

      本文标题:nginx实现根据cookie分流

      本文链接:https://www.haomeiwen.com/subject/szqfjftx.html