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";
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章