springboot应用nginx负载,sso登陆丢失session问题。

环境:springboot项目+nginx负载 

最近项目上线,部署到正式环境后SSO登陆总是出问题,困扰了好几天。

下面来看下问题:springboot项目集成sso登陆,部署到正式环境,单应用服务启动后正常sso登陆登出,双应用启动后,第一次登陆登陆正常,第二次SSO登陆会跳转到我们的springboot项目自带的登陆入口。各种思考测试最终定位问题是session或cookie丢失。

原因是Nginx配置文件中少配置了一个ip_hash导致的:

IP_HASP策略说明 :nginx 的 upstream默认是以轮询的方式实现负载均衡,这种方式中,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 另外一种方式是ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

下面附上部分nginx重要代码:

 upstream portal_server {
      
      server    192.168.1.11:8080  max_fails=2 fail_timeout=30s;
      server    192.168.1.12:8080  max_fails=3 fail_timeout=30s; 
      ip_hash;
    }

     upstream sso_server {
      server   192.168.1.11:8080  max_fails=2 fail_timeout=30s;
      server   192.168.1.12:8080   max_fails=3 fail_timeout=30s;
      ip_hash; #这里之前忘记写了,只在上面的写了 所以导致session不固定
    }

    server  {
        listen       80;
        server_name  xxxxx.com.cn;
		
		location / { 
			proxy_pass   http://portal_server/;
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		}
		location /sso/ticket { 
			proxy_pass   http://sso_server/sso/ticket;
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		}
		  
  }
  server  {
        listen       80;
        server_name  13;
		
		location / { 
			proxy_pass   http://portal_server/;
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		}
		 
   }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值