Smart-SSO支持服务端和客户端多实例的方式部署。它依靠引入Redis来接管服务端凭证存根和客户端凭证的存储,从而实现分布式部署场景下的Token共享。注意客户端和服务端是可以使用不同Redis服务的,且互不影响,只需要保障同一客户端应用或者服务端的多个实例连接的是相同Redis服务就行。以下为简化部署,客户端和服务端使用了同一个Redis服务。同时借助Nginx反向代理实现单域名转发到后端多实例,验证分布式部署下的Token共享。所以项目环境搭建前,你需要准备以下环境。
- Redis:6.2.1
- Nginx:1.23.2
1.服务端配置
修改pom.xml文件,把服务端依赖的装配包都改为Redis版本,,并重新maven reload一下。
smart-sso-starter-client改为smart-sso-starter-client-redis
smart-sso-starter-server改为smart-sso-starter-server-redis
修改application.yaml文件,去除服务端地址域名后的8080端口,并开启修改redis连接配置。
通过环境变量参数动态修改端口的方式,为服务端启动8090和8091两个实例。
2.客户端配置
修改smart-sso-demo的pom.xml文件,由smart-sso-starter-client改为smart-sso-starter-client-redis装配redis依赖,并重新maven reload一下。
修改application.yaml文件,去除服务端地址域名后的8080端口,并开启修改Redis连接配置。
通过环境变量参数动态修改端口的方式,为服务端启动8092和8093两个实例。
3.Nginx配置
找到nginx.conf配置文件,分别增加代理转发配置,让域名server.smart-sso.com转发到本地的8090和8091端口,让demo.smart-sso.com转发到本地的8092和8093端口,并启动/重启nginx,让配置生效。 注:10.31.88.96为本地ip,使用localhost和127.0.0.1可能不生效。
upstream demoServers {
server 10.31.88.96:8092;
server 10.31.88.96:8093;
}
server {
listen 80;
server_name demo.smart-sso.com;
location / {
proxy_pass http://demoServers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
upstream serverServers {
server 10.31.88.96:8090;
server 10.31.88.96:8091;
}
server {
listen 80;
server_name server.smart-sso.com;
location / {
proxy_pass http://serverServers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
如下图所示:
4.验证
服务端验证,浏览器访问server.smart-sso.com ,完成登录访问到首页,并进行多次页面请求刷新,可以在后台Debug断点看到端口8090和8091的服务交替访问,说明域名已通过nginx正常转发到8090和8091两个实例。
客户端验证,浏览器访问demo.smart-sso.com ,会直接跳转到首页(因为服务端作为它自身的一个客户端已完成单点登录)。并进行多次页面请求刷新,可以看到端口8092和8093交替访问。域名已通过nginx正常转发且Token实现共享。