nginx实现根据cookie分流

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


作者:hybzzz
链接:https://www.jianshu.com/p/b8fa8adb5119
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

posted on 2020-03-20 15:09  ExplorerMan  阅读(1147)  评论(0编辑  收藏  举报

导航