云计算百科
云计算领域专业知识百科平台

服务器并发

解决服务器并发使用负载均衡。

可以做负载均衡的有很多:nginx、apache、tomcat。现在都用Spring Cloud LoadBalancer。

负载均衡涉及到一个session共享问题。你一个服务器有session,一个没有肯定有问题。可以用cookie来做。session存在服务器端,会占用服务器内存,必定会影响服务器硬盘的读写性能。cookie存储在客户端是存在客户的电脑里,如果清cookie就有问题了,还可以用token来做。

JWT Token

JWT是一种流行的跨域认证解决方案。它将用户信息加密到Token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。

JWT Token包含三部分:

Header(头部):包含算法信息和JWT类型。例如:{“alg":“HS256”,“type”,"JWT}

{         Typ=“jwt”———类型为jwt         Alg:“HS256”—–加密算法为hs256 }

Playload(负载/有效载荷):存储了有关用户身份和其它元数据的信息(用户唯一标识、角色)。

                                           例如:{“userId”:“1”,“username”:“mayikt”}

iss: jwt签发者 sub: jwt所面向的用户 aud: 接收jwt的一方 exp: jwt的过期时间,这个过期时间必须要大于签发时间 nbf: 定义在什么时间之前,该jwt都是不可用的. iat: jwt的签发时间 jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

Signature(签名):通过使用密钥对前面两部分进行哈希计算。

这段是签证信息,非常非常关键的部分。 这关乎你的这个 Token 是否安全,是否能被人仿造。 一般是对 header (base64后的) 和 payload (base64后的) 这两部分的数据通过 secret(私钥)进行签名后的结果。所以这个签名算法就非常关键了,常用的有 SHA256 和 HMAC,个人更推荐使用 RSA。

JWT续签,双Token机制:

访问令牌(Access Token):一般存储时间短(30分钟或者一个小时),存储在客户端避免长期存储

刷新令牌(Refresh Token):一般存储时间长(7天或者10天),存储在更安全的位置,如HTTP-only的Cookie,减少被恶意脚本访问的风险。

刷新令牌的有效期长,访问令牌的有效期短。刷新令牌是用来刷新访问令牌的。登录后,服务器会一次性生成刷新令牌和访问令牌两个Token。访问令牌用户访问受保护的资源的钥匙。刷新令牌是在访问令牌过期后获取新的访问令牌。

双Token的工作流程:

  • 用户提供凭证(如用户名和密码)进行身份验证。
  • 服务器生成一个访问令牌和一个刷新令牌,返回给客户端。
  • 客户端在每次请求中携带访问令牌。
  • 服务器验证访问令牌的有效性,允许或拒绝访问。
  • 如果访问接口,access_token过期,返回401错误码
  • 拿到refresh_token去访问后台接口
  • 先查数据库,如果refresh_token不存在,报错:刷新令牌不存在
  • 校验refresh_token是否过期,是->提示:token已过期
  • refresh_token没有过期,向授权服务器发送刷新令牌请求:
  • 请求参数
  • {         grant_type=“refresh_token表示使用刷新令牌获取新的访问令牌”         refresh_token:“客户端传来的” }
  • 返回参数
  • {         access_token=“新的访问令牌”         refresh_token:“新的刷新令牌” }
  • 拿到新的访问令牌,返回给客户端。客户端再次发送包含新的访问令牌的请求,这就实现了访问令牌的自动续期。

 刷新令牌被盗用:

(1)、要用授权服务器的监控机制和撤销令牌机制来保证安全

(2)、限制刷新令牌的使用次数,使用一次,就更换新的刷新令

我们把所有信息都存储在token中吗?

不建议将所有信息都存储在jwt中。jwt主要用于存储必要的身份验证和授权信息,以确保每次请求都能识别和验证用户身份。

JWT一定安全吗?

JWT并不是绝对安全的,安全性取决于其使用方法和环境配置

1、使用强加密和签名算法:HS256和RS256

2、安全存储密钥

3、短期有效性

4、HTTPS传输,防止中间攻击

5、方式重放攻击:可以引入jti(JWT JTI)和iat(ISSUED AT)等声明,并在服务器端维护已使用的令牌,防止重放攻击

6、保护JWT:防止被盗用的措施包括使用短期令牌和刷新令牌,撤销机制,绑定IP和user-agent以及加密敏感数据

 为什么现在做负载均衡都不用nignx了?

以前做负载均衡用你滚下做,现在都用spring cloud的负载均衡组件,说白了就是不需要运维了,开发人员也能做负载均衡,降低了学习成本,要不你还得学nginx、Linux啥的

Nginx介绍:

Nginx是一款轻量级的web服务器。反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

特点:

占用内存少、并发能力强

Nginx的并发能力是在同类型的网页服务器中表现比较好,并发能力50000

Nginx支持哪些类型的反向代理?

1、基于七层对的Http/Https/mail等应用协议的代理

2、基于四层的ip+tcp/udp端口的代理

Nginx的反向代理

Server{
listen 82;
server_name localhost;
location /{
#代理服务器地址
proxy_pass Http://192.168.111.132:8080;
}
}

Nginx动静分离:

动:动态资源(接口)

静:静态资源(css、js、image)

分离:之前静态资源和动态资源放在Web服务器下,现在把静态资源放入Nginx服务器下(/nginx/static/css或者image/js),动态资源放在web服务器下

Server{
listen 84;
server_name localhost;
location /{proxy_pass Http://qy174}
location ~\\.js|.css|.jpg|.png|.jpeg|.ico|.mp3|.mp4|.avi{
root static;
}
}

Nginx的负载均衡:

 1、默认负载均衡:

定义集群名称

upstream qy174{
#真实web服务器集群的信息
server 192.168.111.132:8081;
server 192.168.111.132:8082;
}

Server {
listen 83;
servername localhost;
location /{
proxy_pass Http://qy174;
}
}

2、权重负载均衡

#权重越大,访问频率越高
upstream qy174{
server 192.168.111.132:8081 weight=3;
server 192.168.111.132:8082 weight=1;
}
Server{
listen 83;
servername localhost;
location /{
proxy_pass Http://qy174;
}
}

 3、ip_hash策略

根据访问者客户的IP,固定访问对应的Web服务器

upstream qy174{
server 192.168.111.132:8081;
server 192.168.111.132:8082;
ip_hash;
}
Server{
listen 83;
servername localhost;
location /{
proxy_pass Http://qy174;
}
}

赞(0)
未经允许不得转载:网硕互联帮助中心 » 服务器并发
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!