nginx+tomcat+redis实现session共享,搭建单机集群

2023-11-04

【环境描述】

【实现达到的效果】
       当客户端访问Nginx服务器时,Nginx负载均衡会自动将请求转发到TomcatA或TomcatB服务器,以减轻Tomcat压力,从而达到    Tomcat集群化部署,为了使各Tomcat之间共享同一个Session,将采用Redis缓存服务来集中管理Session存储。

  1. 配置三个tomcat可以正常运行web程序

tomcat8080:找到tomcat目录下的server.xml文件,查看链接端口,我这里设置的是8080 端口。分别设置如下:

<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

tomcat8081:端口设置如下:

<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1"/>
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

tomcat8082端口设置如下:

<Server port="8007" shutdown="SHUTDOWN">
<Connector port="8082" protocol="HTTP/1.1"/>
<Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />

以上端口设置要确保系统中没有占用的端口。

做完上面步骤后,可以在网页上新建一个jsp 或则html,测试代码如下:

<html>
<head>
<meta charset="ISO-8859-1">
<title>tomcat</title>
</head>
<body>
	<h3>tomcat8080</h3>
	<p>session ------ ${sessionId }</p>
</body>
</html>

三个tomcat中依次添加如上图所示。配置好启动tomcat后,在网页上运行三个tomcat地址后会发现,此时三个的session是不同的

 

    2.配置session共享

 需要把上面所下载的jar包放入tomcat的lib下,然后在三个tomcat的conf文件夹下的context.xml中配置如下:

<Context>

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
    <!--host为redis的地址,prot为端口,如果有密码可以加上password,database表示数据库,最后的则表示多长时间清除session-->
	<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
	<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
         host="127.0.0.1"  
         port="6379"  
         database="0"  
         maxInactiveInterval="60" />
</Context>

配置好后启动tomcat和redis,然后再次访问,会发现这时候无论访问那个tomcat,session都是一样的。这时候就达到session共享的情况了。

3.配置nginx的conf文件

配置代码如下图所示:

#服务器的集群  
    upstream  mesh {  #服务器集群名字   
        server    192.168.1.166:8080  weight=1; #服务器配置   weight是权重的意思,权重越大,分配的概率越大。  
        server    192.168.1.166:8081  weight=2; 
		server    192.168.1.166:8082  weight=3;		
    }
	
    server {
        listen       8088; #监听的端口,可以改成其他端口,请求为 localhost:8088,则交给192.168.1.166的服务器集群处理
        server_name  mesh; #当前服务的域名 

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
			proxy_pass http://mesh;  #服务器集群名字
            proxy_redirect default; 
            
            proxy_set_header Host $host:$server_port; #非80端口,用80端口时,不需要$server_port 
            proxy_set_header X-Real-IP $remote_addr;  
            proxy_set_header X-Real-Port $remote_port;  
            proxy_set_header X-Real-User $remote_user;  
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme; #解决getScheme,isSecure,sendRedirect
        }

然后重新tomcat,启动nginx代理服务器。

nginx常用命令

#进入nginx目录
start nignx ---为开启nginx,可在日志查看是否开启成功

nginx -s -reload ---修改后重新加载


nginx -s stop  ---强制退出,暴力退出


nginx -s quit   ---执行完后退出

这时候我们就搭建成功了。可以流畅的让客户使用程序了

4.小编再搭建的时候还遇到一个问题。这里跟大家说一下

我用的还是传统的jsp页面,引入的js等静态数据无法在客户端被读取,我的项目中是用的freamake标签${WEBROOT}动态获取的。找到访问请求时拼接的资源,改成配置。在配置里把路径配成相对路径。这时候就能完美运行了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx+tomcat+redis实现session共享,搭建单机集群 的相关文章

  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • 使用会话 php 创建 cookie?

    我使用会话来登录我网站中的用户 问题是 我想让用户remember密码 因此关闭 打开浏览器后他们不需要再次登录 我需要使用 cookie 和 session 来实现它吗 my code user POST user pass POST p
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • Redis如何存储关联数组?设置、散列还是列表?

    我对 Redis 的所有可用存储选项有点困惑 我想做一些简单的事情 并且不想过度设计它 我正在与phpredis and Redis v2 8 6 我有一个需要存储的简单关联数组 我还需要能够通过其键检索项目并循环遍历所有项目 a arra

随机推荐

  • 取服务器视频文件,视频从云服务器获取视频文件

    视频从云服务器获取视频文件 内容精选 换一换 支持将华为云服务器上的音视频文件通过内网方式上传到与服务器在同一区域的视频点播服务中 但您需要先将服务器当前使用的DNS切换为华为云的内网DNS 具体请参见怎样切换内网DNS 然后使用视频点播服
  • MATLAB 文件及文件夹操作

    1 matlab中读取一行多个字符的文本 fid fopen while feof fid tline fgetl fid row col size tline print findstr tline print vein findstr
  • 代码保护软件VMProtect用户手册主窗口之主菜单

    VMProtect是一种很可靠的工具 可以保护应用程序代码免受分析 但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下 才能实现最好的效果 下载VMProtect最新试用版 接下来为大家介绍关于VMProtect中主
  • PerfView专题 (第十二篇):对 C# 下的 SDK 类库进行监控(大结局)

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 计算机拒绝访问移动硬盘,移动硬盘拒绝访问怎么办

    在有些时候我们的移动硬盘拒绝访问了 这该怎么办呢 那么下面就由学习啦小编来给你们说说移动硬盘拒绝访问的解决方法吧 希望可以帮到你们哦 移动硬盘拒绝访问的解决方法一 第一线不宜太长 要插在主机后面的USB插口 插上移动硬盘 2 桌面右键单击
  • iOS 打包出错, 编译出错,证书问题,上传AppStore

    1 ERROR ITMS 90046 90085 Invalid Code Signing Entitlements Your application bundle s signature contains code signing ent
  • 利用gitlab pages和hexo搭建一个个人博客

    AI boy原创 转载请注明出处 1 使用github pages存在的问题 目前网上有很多利用github pages和hexo搭建个人博客的教程 但是github目前拒绝了百度蜘蛛的爬取 因此如果希望自己的博客能够被百度收录 就需要采用
  • 前端开发中的 json 和 xml 还有JavaScript的异步加载

    1 xml XML文档中的数据采用元素像 HTML 的段落一样展现
  • 基于Golang和WebSocket打造自已的反向代理

    当我们在开发的时候 有时想要把自已开发的接口暴露给其他开发者或者第三方的服务 方便我们调试和排查问题 那就需要某种机制把我们本地的服务接口暴露到互联网上 本文将要介绍如何通过Golang和WebSocket来实现这一功能 为什么我们需要开发
  • 1032 挖掘机技术哪家强python3无超时

    改进后的代码成功率在90 文章目录 1 最初代码 2 改进代码 1 最初代码 usr bin env python coding utf 8 File 1032 py Time 2020 04 08 17 02 03 Author Schi
  • nginx 之 pcre 安装

    1 下载pcre wget https nchc dl sourceforge net project pcre pcre 8 43 pcre 8 43 tar gz 2 解压 3 进入解压目录 4 执行如下命令 configure ena
  • 【pytorch】pytorch使用记录(持续更新)

    1 找不到moule xxx 当训练模型在重新加载用于评估的时候出现少了一个module前缀 这个问题通常是由于训练的时候采用了数据并行操作 而评估模型的时候却没有用到 因此 只需要在训练代码中补充 net nn DataParallel
  • 深入理解Java中的字符串驻留机制

    引言 在Java编程中 字符串是最常用的数据类型之一 而Java的字符串驻留 intern 机制则是字符串处理中一个重要且经常被忽视的话题 本文将带您深入探讨Java中字符串驻留机制的原理和影响因素 什么是字符串驻留机制 字符串驻留机制是指
  • VAF Variance Accounted For(方差贡献率)

    VAF是指方差贡献率 是一种用于衡量 评估 模型预测能力的指标 即模型的预测结果与实际结果的相关程度 VAF越高 说明模型对实际数据的解释能力越好 模型预测结果越接近实际结果 计算公式 V A F 1
  • 禅道api调用(爬虫方式)

    目录 获取所有进行中的项目信息 url postman Java代码 实体类 逻辑处理 根据项目id获取指定项目下所有未关闭的任务id url postman Java代码 总结 在Java中 我们可以使用各种库和框架来创建自己的爬虫程序
  • 百度你不知道的技巧使用

    百度搜索引擎 技巧使用 例如 python 屏蔽广告 python 能够减小搜索范围 pythonfiletype pdf 搜索文件 intailpython 进行精准匹配 pythoninurl video 匹配带视频的关键词
  • 解决 ResourceWarning: unclosed <socket.socket fd=628, family=AddressFamily 警告问题 unittest ddt data 数据驱动

    文章目录 1 问题 2 办法 1 问题 ResourceWarning unclosed
  • unity常用生命周期函数以及执行顺序详解

    执行顺序 Awake gt OnEnable gt Start gt FixedUpdate gt Update gt LateUpdate gt OnGUI gt OnDisable gt OnDestroy gt OnApplicati
  • 大数据:推荐系统

    大数据 推荐系统 下面是我看 大数据 互联网大规模数据挖掘与分布式处理 一书第九章的总结 1 效用矩阵 推荐系统处理对象是用户和项 该矩阵提供某个用户对某个项的喜好程度 通常而言 大部分元素未知 推荐系统是基于已知项对未知元素进行预测 2
  • nginx+tomcat+redis实现session共享,搭建单机集群

    环境描述 以下环境是我亲测有效的搭建环境 redis 下载地址 https download csdn net download qq 37535558 12527340 tomcat8 5 20和redis的工具jar包下载地址 http