在部署nginx的出现一个问题;
当nginx只部署一个后端服务的时候可以正常登录,但是当部署两个后端服务器的时候,就会出现登录失败的问题;
下面放一下配置的文档
你是不是做的反向代理
配置会话共享模式,默认是轮询的,望采纳!
ip_hash(访问ip)
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream favresin{
ip_hash;
server 10.0.0.10:8080;
server 10.0.0.11:8080;
}
那个“weight=1; ”后面的“;”去掉
多给一种方式
按后端服务器的响应时间来分配请求,响应时间短的优先分配
upstream myserver {
server 172.15.20.25:8080;
server 172.15.20.16:8080;
server 172.15.20.18:8080;
fair;
}
增加 2个节点,就是启动2个nacos服务,每个服务占用一个端口,调用集群
因为你后端服务用的session做的登陆认证,所以你nginx必须使用ip_hash策略,起到保持会话的作用,如果nginx前面还有其他路由也要做保持会话;
比如,有人登陆了一次,session被认证过了,但是下次请求来的时候你nginx给分配到另外一个服务器了,这个服务器并不知道这个人有没有认证过,这算是一种比较古老的技术方案,现在用的比较少了。
如果想彻底解决这个问题,就需要服务的登陆方案升级了,古老的方式就是tomcat共享session,现在也是基本没人用了,比较流行的就是通过缓存服务器做session共享。
1、需要登录这种,你需要使用ip_hash让同一个连接过来还是分配到同一个后端去,权重和轮询都会切换服务器,会出现需要重新登录的问题;
2、如果一定要是有权重这种,还需要后端服务器之间中间件服务配置有会话共享功能。
你把server中的端口分别改为8080,8081和8082试试
这个不是权重的问题,权重解决的是希望某些后端机器多承担一些请求
你的这个问题是session会话问题,因为会话没有保持,第一次请求到第一台机器上,并做了登录,第二次请求又跑到第二台机器上会话丢失
解决的办法可以用ip_hash,或者第三方插件nginx-sticky-module,或者将会话进行共享,保存在redis中等等
根据你的描述,很可能是没有处理session会话保持的问题。
nginx可以开启配置,如果是同一个用户转发到同一台服务。
如果要做到均衡,可以考虑redis做session保持。
【Nginx 反向代理/负载均衡服务器的配置及常见的问题】https://minipro.baidu.com/ma/qrcode/parser?app_key=y1lpwNoOyVpW33XOPd72rzN4aUS43Y3O&launchid=c831264a-75f3-435a-96c6-f5d68dac3385&path=%2Fpages%2Fblog%2Findex%3FblogId%3D118733019%26_swebFromHost%3Dbaiduboxapp