• Centos7下Nginx+Tomcat配置反向代理,使用redis解决session一致性问题


    一、session一致性问题

           使用集群方案解决网站高并发问题时,就会部署多台应用服务器。当用户第一次通过客户端(如:浏览器)访问服务器时,服务器会创建对应的session,

    使用Nginx反向代理,假如用户A第一次访问站点,被反向代理到服务器一处理,服务器一创建对应sessionA记录信息,用户A再次访问站点时,被反向代理到服务二处理,

    而服务器二没有记录用户A的session信息,就会新创建sessionB,导致用户A之前操作丢失。

           我们可以通过让多个服务器统一到同一个地方新建session和取session,来解决session不一致的问题。

    二、基于上篇搭建好Nginx+Tomcat环境信息,可以使用memcached解决session一致性问题

          Linux下Nginx+Tomcat配置反向代理

    三、Redis简介

      REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

    四、配置

          1、安装Redis,默认端口为6379

    cd  /usr/local/redis/
    wget http://download.redis.io/releases/redis-4.0.8.tar.gz
    tar  xzf redis-4.0.8.tar.gz
    cd  redis-4.0.8
    make

          2、启动,并且修改/usr/local/redis/redis-4.0.8/redis.conf 的bind值,改为本机ip

    ./redis-server  --protected-mode no

          3、上传jar包到tomcat的lib目录下,实现让多个服务器统一到redis新建session和取session

                jar包可以去github查看下载,地址:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

          4、修改每一个tomcat配置信息

                a、为了便于测试,修改/usr/local/tomcat/apache-tomcat-8.0.50/conf/server.xml文件,Engine节点添加jvmRoute="tomcat1"(103行左右,多个tomcat修改名字不同)

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" >

           b、修改/usr/local/tomcat/apache-tomcat-8.0.50/conf/context.xml,实现tomcat到Redis新建session和取session,在Context节点里添加如下配置

          memcachedNodes="redis://192.168.182.131:6379",这个ip需要是自己安装的redis的ip

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
             memcachedNodes="redis://192.168.182.131:6379"
             requestUriIgnorePattern=".*.(ico|png|gif|jpg|css|js)$"
             />

     五、测试

          浏览器访问192.168.182.130,ctrl + F5刷新浏览器,查看session信息是否和预期一致。

    六、tomcat和nginx安装可以参考个人的随笔

         Linux环境下安装Tomcat

         CentOS7编译安装Nginx

    yexiangyang

    moyyexy@gmail.com


     

  • 相关阅读:
    Java Map遍历方式的选择
    UriMatcher类的addURI()方法
    Java IO流分析整理[转]
    java基础一些注意细节
    java中static变量和方存在内存什么区域
    详细解析Java中抽象类和接口的区别
    mybatis一些记录
    Go语言简介(上)— 语法
    JavaScript相关-深入面向对象
    33个组件5
  • 原文地址:https://www.cnblogs.com/moy25/p/8497270.html
Copyright © 2020-2023  润新知