zoukankan      html  css  js  c++  java
  • 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
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    雷林鹏分享:EJB回调
    雷林鹏分享:EJB注解
    雷林鹏分享:EJB持久性
    雷林鹏分享:EJB有状态会话Bean
    雷林鹏分享:EJB无状态Bean
    雷林鹏分享:EJB创建应用
    雷林鹏分享:EJB概述
    雷林鹏分享:EJB教程
    Java集合框架
    Java集合源码剖析——ArrayList源码剖析
  • 原文地址:https://www.cnblogs.com/ExMan/p/12531875.html
Copyright © 2011-2022 走看看