nginx 根据cookie分流

背景,项目多节点部署,项目中使用了本地缓存,同一用户需要在同一个服务上操作,才能使用到本地缓存.

考虑过使用ip分流,由于ip是阿里转发后再到我们的ngxin,所以这个时候的ip不可靠,也许不是用户原始ip,

所以使用cookie分流.

因为我们每次登陆成功都会返回随机cookie,但是同一个用户的cookie在访问服务期间不会变,所以可以利用cookie

$COOKIE_test1 语法解释:获取cookie名字为test1的值,判断是0到9访问apache001,判断是a到z访问apache002,

默认是root;

 

nginx配置:

    map $COOKIE_test1 $group {
        ~*[0-9]$ apache001;
        ~*[a-z]$ apache002;
            default root;
    }

    upstream apache001 {
    server 127.0.0.1:8082 weight=1 max_fails=1 fail_timeout=30s;
    }

    upstream apache002 {
    server 127.0.0.1:8083 weight=1 max_fails=1 fail_timeout=30s;
    }

    upstream root {
    server 127.0.0.1:8084 weight=1 max_fails=1 fail_timeout=30s;
    }
   
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

    # waa
    location /springboot {
            proxy_pass http://$group;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
        }

 

后端代码:

 

@RequestMapping(path="/login",method=RequestMethod.GET)
public String loginView(HttpServletRequest request, HttpServletResponse response) {
    Cookie cookie = new Cookie("test1","ABDC");
    response.addCookie(cookie);
    System.out.println("访问登录");
    return  "login";
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章