背景,項目多節點部署,項目中使用了本地緩存,同一用戶需要在同一個服務上操作,才能使用到本地緩存.
考慮過使用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"; }