多个nginx共享值、缓存问题

背景

目前我在集成登录认证功能(cas),使用的架构是nginx+lua,由于我们有多个系统(全是前端项目),每套系统都采用nginx+lua的方式进行部署(即每个系统都是一个nginx),cas登录认证使用到了nginx缓存机制,现在的问题在于这么一个场景:

有两个项目A、B,两个使用的是同一个域名C,如下图:

在这里插入图片描述

问题所在:

用户的角度是:AB是一套系统,我登录了A,到B系统我就不会在登录了…

开发角度:因为A、B是两套nginx,登录认证又使用到了nginx缓存,这就造成一个问题,访问A的使用用的是A系统的缓存,访问B系统,使用的是B系统的缓存;即便在A系统登录了,但是到B系统,由于B系统没有缓存,就会造成在登录一次;

解决方案

对于上述的问题,目前我想到了下面这几种方案,各有优缺点,选择自己最合适的就行;

  1. 引入redis集中缓存;
  2. 使用共享磁盘,使用一个nginx缓存,路由的时候,路由到共享磁盘的绝对路径上;
  3. 更改路径,在使用缓存的地址上,分别路由到各自的缓存上,分别使用各自的缓存(缺陷,如果使用cookie的话,会频繁刷新cookie,并且会给服务带来性能压力)
  4. 将项目部署同一个nginx上(缺点:部署发布的时候,流程特别慢!nginx要是炸的话,项目全炸)

方案一:redis

统一使用redis缓存;

将缓存使用一个集中式的,就可以避免上述的问题,而且还顺带解决了单点登录问题!!

优点:

  • 解决了缓存共享值问题;
  • 解决单点登录问题;

缺点:

  • 引入了redis,系统复杂度变高
  • 维护成本也上升;

方案二:共享磁盘

这种方式是,使用一个nginx的缓存,在具体路由B项目的时候,路由到共享磁盘的绝对路径上;

相当于是B项目的部署只是为了将内容放到共享磁盘里面,真正走的只有A系统,通过location段路由到共享磁盘目录就行

A项目的nginx配置示例:

server {listen 8080;server_name ~^test-(?<subdomain>.+)\.aaaa\.com;# 禁止转发时携带端口port_in_redirect off;client_body_buffer_size 1024m;client_max_body_size    1024m;gzip on;gzip_min_length 1k;gzip_comp_level 2;gzip_types text/plain text/json application/javascript application/x-javascript text/css application/xml text/javascript font/ttf font/otf image/svg+xml;gzip_vary on;set $hpath '/usr/share/nginx/html/dist/$subdomain/';# 访问B项目的时候,在这里写死共享磁盘路径location /info {set $hpath '/home/dist/bdcInfo/';resolver 8.8.8.8;     # access_log /home/cc.log main;# error_log /home/ww.log;   access_by_lua_file /etc/nginx/cas.lua;default_type text/plain;alias $hpath;index index.html;try_files $uri $uri/  /index.html;}location / {resolver 8.8.8.8;     # access_log /home/cc.log main;# error_log /home/ww.log;   access_by_lua_file /etc/nginx/cas.lua;default_type text/plain;root $hpath;index index.html;try_files $uri $uri/  /index.html;}location /currentUser {default_type text/html;charset utf-8;# access_log /home/base-station-test11.log main;# error_log /home/qq.log;access_by_lua_file /etc/nginx/current_user.lua;}proxy_intercept_errors  on;error_page 404 400 403 500 502  = /404.html;location = /404.html {root /home/resource;}
}

优点:

  • 解决了上述问题;

缺点:

  • 需要运维引入共享磁盘,技术选型:nfs ,fastdfs,nas,增加运维成本

方案三:配置B的登录路由

需要前端配合请求权限的接口修改为B的前缀,我这里使用到的登录接口为currentUser

nginx示例配置

server {listen 8080;server_name ~^test-(?<subdomain>.+)\.aaaa\.com;# 禁止转发时携带端口port_in_redirect off;client_body_buffer_size 1024m;client_max_body_size    1024m;gzip on;gzip_min_length 1k;gzip_comp_level 2;gzip_types text/plain text/json application/javascript application/x-javascript text/css application/xml text/javascript font/ttf font/otf image/svg+xml;gzip_vary on;set $hpath '/usr/share/nginx/html/dist/$subdomain/';# 访问B项目的时候,在这里写死共享磁盘路径location /info {set $hpath '/home/dist/bdcInfo/';resolver 8.8.8.8;     # access_log /home/cc.log main;# error_log /home/ww.log;   access_by_lua_file /etc/nginx/cas.lua;default_type text/plain;alias $hpath;index index.html;try_files $uri $uri/  /index.html;}# 新增B请求登录的接口前缀location /info/currentUser {default_type text/html;charset utf-8;# access_log /home/base-station-test11.log main;# error_log /home/qq.log;access_by_lua_file /etc/nginx/lua/cas-auth/current_user.lua;}location / {resolver 8.8.8.8;     # access_log /home/cc.log main;# error_log /home/ww.log;   access_by_lua_file /etc/nginx/cas.lua;default_type text/plain;root $hpath;index index.html;try_files $uri $uri/  /index.html;}location /currentUser {default_type text/html;charset utf-8;# access_log /home/base-station-test11.log main;# error_log /home/qq.log;access_by_lua_file /etc/nginx/current_user.lua;}proxy_intercept_errors  on;error_page 404 400 403 500 502  = /404.html;location = /404.html {root /home/resource;}
}

这种方案成本比较低,但是缺点也很明显;

这种在请求A的时候,会走登录,请求B的时候,也会走登录,但是A,B域名一致,就导致A,B的cookie来回重刷,比较耗费性能!

这里还有个疑问点是:

为什么在登录了A之后,在请求B的时候为什么不跳登录页,而是直接走接口!!!(这里没弄懂)

就是我第一次登录的时候,访问A,A会跳转到登录页,然后输入用户名密码之后,走了一系列的登录接口,登录成功;

这个时候在访问B ,B没有跳转到登录页,跟A一样,走的一模一样的登录接口,然后登录成功!!

是因为同一域名的问题么?????没搞懂!!

方案四:将A,B部署在同一nginx上

这个就不用解释了,但缺点很明显,一旦nginx出现问题,A,B项目都不能访问,而且在部署的时候,需要拉两套代码,编译两套代码,时间会很长

遗留问题

方案三最后的那几行,确实没想通,如果大家有什么想法的话,欢迎沟通哈!!!!

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

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

相关文章

Joint Bilateral Upsampling

Abstract 图像分析和增强任务&#xff08;例如色调映射、着色、立体深度和蒙太奇&#xff09;通常需要在像素网格上计算解决方案&#xff08;例如&#xff0c;曝光、色度、视差、标签&#xff09;。计算和内存成本通常要求在下采样图像上运行较小的解决方案。尽管通用上采样方…

jquery学习笔记

简介 官网下载&#xff1a;www.jquery.com 版本&#xff1a;1.x.x &#xff08;兼容ie678&#xff0c;常用版&#xff09;, 2.x.x &#xff08;不兼容ie678&#xff09; , 3.x.x&#xff08;只支持最新浏览器&#xff09; 文件&#xff1a;jquery-1.x.x.js &#xff08;可查…

机器学习常用距离度量方法

机器学习常用距离度量方法 前言一、前期准备二、距离度量方法1. 欧氏距离2.曼哈顿距离3.切比雪夫距离4. 闵可夫斯基距离 总结 前言 机器学习中往往通过度量来研究不同样本或数据集之间的差异性&#xff0c;合适的度量方式可以显著提高算法的准确率&#xff0c;因此在接下来的内…

Unity工具脚本-检测资源文件夹是否有预制件是指定层级

效果&#xff1a; 先在菜单栏里面找到Tools/CheckPrefabLayers打开窗口 代码&#xff1a; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine;public class CheckPrefabLayers : EditorWindow {public in…

【EI会议征稿】第三届航空航天工程与系统国际研讨会(ISAES 2024)

第三届航空航天工程与系统国际研讨会(ISAES 2024) 2024 3rd International Symposium on Aerospace Engineering and Systems 第三届航空航天工程与系统国际研讨会将于2024年3月22-24日在南京召开&#xff01;会议紧密聚焦“航空航天工程”领域的热点和难点问题&#xff0c;…

ChatGLM3简介

ChatGLM3简介和使用 ChatGLM3简介推理代码命令行加载 ChatGLM3 简介 ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型&#xff0c;在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上&#xf…

MT8390(Genio 700)安卓核心板_MTK联发科工业AI主板Linux开发板

MT8390 (Genio 700) 安卓核心板是一款高性能边缘人工智能物联网平台&#xff0c;尺寸仅为45452.2mm。该平台提供高度响应的边缘处理、先进的多媒体功能、各种传感器和连接选项&#xff0c;同时支持多任务操作系统。 Genio 700处理器拥有PS APU性能&#xff0c;高效的芯片内人工…

【开题报告】基于机器学习的高速铁路动检数据异常检测算法

文献综述&#xff1a; 国内研究现状 我国铁路历来重视对轨道的检查和监测,并有完整的检查制度和严格检查标准。轨道检测基本分为静态检测和动态检测两大类静态检测主要是复测及限界检查、轨道静态检查、钢轨检查、春秋季检查和量具检查:动态检测则是以轨道检查车为主,并辅助车载…

Java NIO Selector

在 Java NIO&#xff08;New I/O&#xff09;中&#xff0c;Selector 是一种多路复用的机制&#xff0c;用于管理多个通道的 I/O 操作。通过使用 Selector&#xff0c;我们可以在一个线程中同时管理多个通道的读写操作&#xff0c;提高系统的效率和性能。 本篇博客将详细介绍 …

Pinia 和 Vuex 的对比,storeToRefs 的原理

目录 1&#xff0c;Pinia 介绍2&#xff0c;和 Vuex 的对比3&#xff0c;storeToRefs 源码分析 1&#xff0c;Pinia 介绍 官网简介 Pinia 使用上的问题&#xff0c;官方文档很详细&#xff0c;这里不做赘述。 Pinia 是 Vue 的专属状态管理库&#xff0c;支持vue2和vue3&#x…

c++day1

提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {string str;cout << "请输入一个含有大小写字母&#xff0c;空格&am…

C语言面试之旅:掌握基础,探索深度(面试实战之c语言关键词中篇)

劝人的话就像清晨的闹钟&#xff0c;只对别人有用&#xff0c;却永远叫不醒自己。 ----小新 一.预处理指令 &#xff08;1&#xff09;#define & typedef #define是C语言中定义的语法&#xff0c;是预处理指令&#xff0c;在预处理时进行简单而机械的字符串替换&…

java学习part19接口

113-面向对象(高级)-接口的使用_哔哩哔哩_bilibili 1.接口概念 个人认为是一种能力&#xff0c;某个类是否具有某种能力。一个类实现了一个接口就相当于学会了某些功能。 2.使用 接口里的属性都是全局常量public static final&#xff0c;即便不写也会自动加上。 3.多实现 4.接…

Day41 使用listwidget制作简易图片播放器

1.简介 使用QlistWidget实现简易图片播放器&#xff0c;可以打开一个图片序列&#xff0c;通过item的单击事件实现图片的切换&#xff0c;通过设置list的各种属性实现图片预览的显示&#xff0c;美化滚动条即可实现一个简易图片播放器。 2.效果 3.实现步骤&#xff1a; 1.初始…

【沐风老师】3DMAX拼图建模工具MaxPuzzle2D插件使用方法详解

MaxPuzzle2D拼图建模工具使用帮助 MaxPuzzle2D拼图建模工具&#xff0c;拼图建模“彩虹系列”插件&#xff0c;是一款用MAXScript脚本语言开发的3dMax拼图建模小工具&#xff0c;可以创建2D或3D的拼图图形阵列。这让需要拼图建模的设计师大大节省了时间。 MaxPuzzle2D工具界面&…

REST-Assured--JAVA REST服务自动化测试的Swiss Army Knife

什么是REST-Assured REST Assured是一套基于 Java 语言实现的开源 REST API 测试框架 Testing and validation of REST services in Java is harder than in dynamic languages such as Ruby and Groovy. REST Assured brings the simplicity of using these languages into t…

解决ssh使用public key远程登录服务器拒绝问题

目录 使用场景windows安装ssh客户端使用powershell ssh登录服务器生成密钥文件ubuntu ssh服务器配置使用vscode远程登录使用Xshell远程登录使用MobaXtem远程登录Server refused our key问题解决方案 使用场景 使用vscode远程ssh登录使用public key不需要输入密码,比较方便. w…

《Effective C++》条款24

若所有参数皆需类型转换&#xff0c;请为此采用non-member函数 如果想实现这样的一种运算符重载&#xff1a; class A { public:A(int x) :_x(x) {};const A operator*(const A& a){A ret(0);ret._x a._x * a._x;return ret;} private:int _x; }; A a(1); A b(2); A ret…

JSP forEach标签varStatus使用讲解(了解即可 基本用不到)

上文 JSP迭代标签之 forEach循环标签 基本使用讲解 我们讲了一下forEach标签 大多数时候会用的语法 但是varStatus 没有讲到 因为我觉得这个东西 做个了解就好了 如果你不感兴趣都可以不看 因为感觉开发中基本是用不到的 但是 官方有提供 我还是说一下 当前遍历的基本信息 包括…

易点天下携AIGC创新成果KreadoAI亮相数贸会,解锁电商文化出海新可能

11月27日&#xff0c;第二届全球数字贸易博览会&#xff08;以下简称“数贸会”&#xff09;在浙江杭州完美落幕。作为出海营销领域最早一批布局AIGC战略的营销科技公司&#xff0c;易点天下受邀与来自全球800余家境内外数字贸易企业同台参展&#xff0c;并分享了旗下AIGC数字营…