请求分发场景下的鉴权问题

说明:记录一次对请求分发,无法登录系统的问题。

场景

如下,在此结构下,如何判断该用户是已登录的用户

在这里插入图片描述

常规操作,用户登录后给用户发Token,同时将发放的Token存入到Redis中。要求用户后续请求需要用户携带Token访问。后端接口在处理请求之前,鉴别用户的Token(合法有效),通过校验才处理请求,不然返回对应的错误信息(未登录、已过期)。

在此之上,只需要后端服务器连接同一台Redis即可。

问题

我现在面临的问题是,两台后端服务器连接的Redis就是同一台。Nginx分发请求,策略是轮询,登录时访问的是后端服务器A,登录完成后接口访问后端服务器B,报“用户未登录或登录过期”信息;

在这里插入图片描述

我推测项目中应该没有给登录用户发放Token,而是使用了进程内缓存来存储相关信息的,也就是说把登录成功的数据存在了代码里。

解决

于是,我想到一种方案,将Nginx分发策略改为 IP哈希 ,这种策略会将IP地址相同的请求分发给同一台后端服务器处理,这样既实现了分发请求,又保证了上述鉴权问题。

如下,是对某项目请求分发的Nginx配置(部分)

    # 分发请求,将请求分发到这两台服务器上,默认策略是轮询;upstream back_server {server 192.168.100.1:8080;server 192.168.100.2:8080;}server {listen       80;server_name  localhost;location / {alias /html/projects;index index.html index.htm;}location /controller/ {proxy_pass http://back_server/controller/;proxy_set_header Host    $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Scheme $scheme;proxy_read_timeout 180s;proxy_buffer_size 128k;proxy_buffers 4 256k;proxy_busy_buffers_size 256k;proxy_redirect off;}}

在此基础上,可将分发策略改为ip_hash,可解决请求分发场景下的鉴权问题;

	upstream back_server {ip_hash;server 192.168.100.1:8080;server 192.168.100.2:8080;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/812310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Vue 3 中使用 Axios 发送 POST 请求

在 Vue 3 中使用 Axios 发送 POST 请求需要首先安装 Axios,然后在 Vue 组件或 Vuex 中使用它。以下是一个简单的安装和使用案例: 安装 Axios 你可以使用 npm 或 yarn 来安装 Axios: npm install axios # 或者 yarn add axios 使用 Axios…

架构设计-订单系统之订单系统的架构进化

1、单数据库架构 产品初期,技术团队的核心目标是:“快速实现产品需求,尽早对外提供服务”。 彼时的专车服务都连同一个 SQLServer 数据库,服务层已经按照业务领域做了一定程度的拆分。 这种架构非常简单,团队可以分开…

单片机方案 发声毛绒小黄鸭

随着科技的不断进步,智能早教已经成为了新时代儿童教育的趋势。智能早教玩具,一款集互动陪伴、启蒙教育、情感培养于一身的高科技产品。它不仅能陪伴孩子成长,还能在游戏中启迪智慧,是家长和孩子的理想选择。 酷得电子方案开发特…

股票价格预测 | Python使用GRU预测股票价格

文章目录 效果一览文章概述代码设计效果一览 文章概述 Python使用GRU预测股票价格 代码设计 import pandas as pd import matplotlib.pyplot as plt import numpy as np import tensorflow as tf from numpy

Python 正则表达式模块使用

目录 1、匹配单个字符 2、匹配多个字符 3、匹配开头结尾 4、匹配分组 说明:在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用re模块 表达式:re.match(正则表达式, 要匹配的字符串) 有返回值说明匹配成功&#x…

13-pyspark的共享变量用法总结

目录 前言广播变量广播变量的作用 广播变量的使用方式 累加器累加器的作用累加器的优缺点累加器的使用方式 PySpark实战笔记系列第四篇 10-用PySpark建立第一个Spark RDD(PySpark实战笔记系列第一篇)11-pyspark的RDD的变换与动作算子总结(PySpark实战笔记系列第二篇))12-pysp…

Springboot+Vue项目-基于Java+MySQL的课程作业管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

秀米、135、蚂蚁编辑器如何为推文添加附件

秀米、135、蚂蚁编辑器作为第三方的公众号图文排版工具,给从事运营和编辑工作的同学提供了更多的排版选择。不同于公众号自家的编辑器,这些第三方编辑器脱离了微信的直接支持,在很多排版操作上,还是有很多操作不一样的地方。 公众…

通过 Vue 3 组合式 API 优化 Uni-app 基础页面功能

Uni-app 是一个跨平台的应用开发框架,支持同时开发小程序、App 和 H5 等多个平台。而 Vue 3 的组合式 API 则是 Vue 3 新增的特性之一,它可以让我们更好地组织和复用组件逻辑。本文将结合 Vue 3 的组合式 API,来优化 Uni-app 中基础页面的功能…

自动化运维(二十三)Ansible 实战动态库存插件和回调插件

Ansible 支持多种类型的插件,这些插件可以帮助你扩展和定制 Ansible 的功能。每种插件类型都有其特定的用途和应用场景。今天我们一起学习动态库存插件和回调插件。 一、动态库存插件 Ansible 动态库存插件允许从各种外部数据源动态获取库存信息,包括主…

AndroidAutomotive模块介绍(一)整体介绍

前言 Android Automotive 是一个基本 Android 平台,可运行 IVI 系统中预安装的 Android 应用以及可选的第二方和第三方 Android 应用。 本系列文档将会系统的介绍 Android Automotive 的功能、架构、逻辑等。模块逻辑将从 应用api接口、系统服务、底层服务&#x…

软件设计师:11-结构化开发与UML

结构化开发(3-4分) 一、模块化 二、耦合(背) 三、内聚(背) 四、设计原则(背) 五、系统文档 六、数据流图 数据流的起点或终点必须有一个是加工 判断依据: 1、…

Vivado Design Suite中route_design命令脚本示例

本文详细介绍了四个route_design命令的示例脚本,这些脚本需要添加到工程的约束文件.xdc中,结果保存在工程文件中的runs\impl_1中的runme.log文件。 一、示例脚本1 route_design write_checkpoint -force $outputDir/post_route report_timing_summary …

img使用 :src 动态绑定图片地址,图片不成功

使用vue cli 创建的vue2项目&#xff0c;项目中想实现轮播效果。 出现的问题&#xff1a; 使用 :src 动态绑定图片地址&#xff0c;图片没有出现 <el-carousel :interval"3000" arrow"always"><el-carousel-item v-for"(item,index) in sw…

【MATLAB源码-第46期】基于matlab的OFDM系统多径数目对比,有无CP(循环前缀)对比,有无信道均衡对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 OFDM&#xff08;正交频分复用&#xff09;是一种频域上的多载波调制技术&#xff0c;经常用于高速数据通信中。以下是关于多径数目、有无CP&#xff08;循环前缀&#xff09;以及有无信道均衡在OFDM系统中对误码率的影响&am…

6-125 二叉树的后序遍历(Python语言描述)

本题要求输出二叉树的后序遍历,输出格式见样例。 函数接口定义: #后序遍历 def postOrder(T)其中二叉树类的定义如下: #二叉树的存储-二叉链表 class BinaryTree:#1.构造方法def __init__(self,newValue):self.key = newValue #树根self.left = None #左子树初…

小程序如何通过把动态数据值传入到css文件中控制样式

场景&#xff1a;动态改变一个模块的高度 一、常用解决方法&#xff1a;行内样式绑值&#xff0c;或者动态class来传递 <viewclass"box":style"height: ${boxHeight}px">我是一个动态高度的box,我的高度是{{boxHeight}}px </view>二、高度传…

第07-1章 计算机网络相关概念

7.1 本章目标 了解网络协议的概念了解网络体系结构熟悉ISO/OSI参考模型以及每一层的功能掌握TCP/IP模型各层的主要协议及其功能熟练掌握IP地址、子网规划等相关内容 7.2 网络协议的概念 7.2.1 概念介绍 &#xff08;1&#xff09;网络协议&#xff1a;计算机网络和分布系统中…

循序渐进丨MogDB 数据库带级联从库的集群切换后如何保持原有架构?

生产数据库运行过程中可能会涉及到升级或者打补丁&#xff0c;导致各节点的角色有计划的发生改变。如果集群内角色发生改变&#xff0c;是否还能保持原有架构继续对外提供服务呢&#xff1f;我们来做一下测试。 采用22模式模拟同城两机房部署4节点 MogDB 数据库集群&#xff0c…

K8S临时存储-本地存储-PV和PVC的使用-动态存储(StorageClass)

介绍 容器中的文件在磁盘上是临时存放的&#xff0c;当容器崩溃或停止时容器上面的数据未保存&#xff0c; 因此在容器生命周期内创建或修改的所有文件都将丢失。 在崩溃期间&#xff0c;kubelet 会以干净的状态重新启动容器。 当多个容器在一个 Pod 中运行并且需要共享文件时…