背景,项目多节点部署,项目中使用了本地缓存,同一用户需要在同一个服务上操作,才能使用到本地缓存.
考虑过使用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"; }