Nginx轮询_因为项目用到Session不能共享,同个ip再次访问都没有权限。

如下图所示我把此项目放到两个端口,并通过nginx反向代理,因为项目中用到了spring Securicty框架并使用session判断登录用户,而且Nginx是轮询方式,点击登录后nginx会请求另一个端口,session不共享导致一点登录就会显示没有权限。
在这里插入图片描述
解决办法:

如下图所示,在upstream下添加一个 ip_hash; 即可

ip_hash 就是同一个ip再次访问会访问同个服务器的同端口
在这里插入图片描述
但是ip_hash也是有弊端的,ip_hash是使用ip地址的前三段进行hash运算,根据结果的不同,重定向到不同的服务器上。在一定区域内我们的电脑都在一个网,所以算出的hashcode都是一样的,所以没有负载分担的效果。

其实还有更好的解决办法,通过Session+redis方法或者通过修改nginx源文件(nginx是用c写的)重新编译安装就能达到根据ip地址不同而分布到不同服务器上。

解决方案

修改nginx的源代码后,重新编译安装,就能实现根据ip地址来区分重定向的目的。

  • 找到nginx压缩包,进行解压
  • 进入nginx目录下的src/http/modules/ngx_http_upstream_ip_hash_module.c文件;
  • 如图所示,找到180多行,根据循环里的i值引用处,将3次改成4次(总共三处)。
  • 重新编译后,果然生效了,就可以根据ip的不同进行负载分担了。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值