Nginx负载均衡的SESSION共享问题解决方案
Nginx是什么?:
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,目前中国使用nginx公司有:百度、京东、新浪、网易、腾讯、淘宝等。
什么是反向代理以及什么是正向代理:
1、反向代理方式,是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器;
2、正向代理,是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
关于反向和正向 proxy推荐LINK:
LINK: https://baijiahao.baidu.com/s?id=1566988836622068&wfr=spider&for=pc
什么是动静分离:
将静态资源(html,js,jquery,img等)资料和后端代码分开放置在反向代理服务器上(或者cdn服务器),后端应用提供API,根据前端的请求进行处理,并将处理结果通过JSON格式返回至前端。
什么是负载均衡:
数据流量分摊到多个服务器上执行,减轻每台服务器的压力,多台服务器共同完成工作任务,从而提高了数据的吞吐量。
例如:一台反向代理服务器和两台应用服务器
一台反向代理服务器通过ip_hash来限制每个请求的ip发放给指定的应用服务器,这样可以避免session共享问题;
负载均衡策略:
1.轮询
这种是默认的策略,把每个请求按顺序逐一分配到不同的server
缺点是:可靠性低和负载分配不均衡。
[code]upstream suyi { server 127.0.0.1:8080; server 127.0.0.1:8090; }
2.最少连接
把请求分配到连接数最少的server
[code]upstream suyi { least_conn; server 127.0.0.1:8080; server 127.0.0.1:8090; }
3.权重
使用weight来指定server访问比率,weight默认是1。用于后端服务器性能不均的情况。
[code]upstream suyi { server 127.0.0.1:8080 weight=6;//60% server 127.0.0.1:8090 weight=4;//40% }
4.ip_hash
每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。
[code]upstream suyi { ip_hash; server 127.0.0.1:8080; server 127.0.0.1:8090; }
ip_hash可以和weight结合使用。
5.fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。
[code]upstream suyi{ server 127.0.0.1:9001; server 127.0.0.1:9002; fair; }
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
[code]upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; }
配置
进入nginx\conf目录,编辑nginx.conf,在#gzip on;这一行下开始配置
关于Nginx.conf的配置推荐LINK: https://www.geek-share.com/detail/2713293260.html
[code]upstream suyi { server 127.0.0.1:8080; server 127.0.0.1:8090; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; proxy_pass http://suyi; index index.html index.htm; } }
配置两个地方,第一个是upstream,另一个是proxy_pass http:// xxx
注意upstream 后面的名字需要和server中的location下的proxy_paxx http:// 后的内容相同
Session共享问题解决方案:
由于请求先通过Nginx代理服务器,再有nginx服务器分配请求到具体的应用服务器中间就会遇到Session共享问题:
1.ip_hash 根据ip分配请求的应用服务器
2.不使用session,换cookie就不会存在此问题,但是网站安全度降低
3.使用cookie和redis缓存(建议此方案,方便扩展,缓存中速度高效)
例如:生成一个uuid作为用户信息的key存放在redis缓存中,再将uuid作为cookie的值写会客户端,cookie的key可以用固定值(常量)
4.放到MySQL数据库中,不推荐(增加数据库的io)
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题
- 解决nginx负载均衡的session共享问题