Springsession nginx反向代理集成过程

 更新时间:2020年04月22日 08:39:49   作者:知识追寻者  
这篇文章主要介绍了Springsession nginx反向代理集成过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一概述

springsession 配置,如果是sevlet的web应用后会自动集成 jdbc ,redis,Hazelcast,MongoDB

二session概述

2.1 分布式项目的session问题

在分布式项目中如果客户端给服务端发送了一个请求,在nginx做反向代理的情况下,第一个请求可能到达tomcat1,此时tomcat1就会创建一个session然后将响应给客户端;同理客户端再次发送一个请求,然后nginx又做了一次反向代理,此时的请求可能到达tomcat2,此时tomcat2会建立一个session响应给客户端;那么问题就产生了,同一个客户端发了2个请求,结果造成两次会话的数据不一致。

2.2主流的解决方案

针对2.1分布式session共享问题,当代主流的解决方案是使用redis做session以达到session共享的目的。请求达到不同的tomcat之后都会往同一个redis中写数据, 当tomcat响应数据的时候就会往同一个redis中读数据 以前我们需要手动的将tomcat获得的session数据存到redis,响应的时候再去redis中取数据。现在springsession会自动帮我们的数据从tomcat中同步到redis,或者自动的从redis中取数据。

三session共享实现方案

3.1环境说明

1jdk1.8

2redis5.05

3idea工具

4maven构建

5springboot 2.1.1

3.2pom.xml

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.1.1.RELEASE</version>
  <relativePath/>
</parent>
<dependencies>
  <!-- redis启动器-->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
  </dependency>
  <!-- web启动器-->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <!-- spring session启动器 -->
  <dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
  </dependency>
</dependencies>

3.3application.yml

spring:
 redis:
  host: 192.168.0.104
  port: 6379
  database: 0
 session:
  store-type: redis
  redis:
   cleanup-cron: 0 1 * * * *

3.4controller

package com.youku1327.spring.session.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;

/**
 * @Author lsc
 * @Description //spring session
 * @Date 2019/9/22 14:01
 * @Version 1.0
 */
@RestController
public class SpringSessionController {

  @GetMapping("set/spring/session")
  public String setSpringSession(HttpSession httpSession){
    httpSession.setAttribute("user","youku1327");
    System.out.println("设置session");
    return "set spring session success";
  }
  @GetMapping("get/spring/session")
  public String getSpringSession(HttpSession httpSession){
    httpSession.setAttribute("user","youku1327");
    System.out.println("响应session");
    return httpSession.getAttribute("user").toString();
  }
}

3.5启动类

package com.youku1327.spring.session;
​
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * @Author lsc
 * @Description //
 * @Date 2019/9/22 13:29
 * @Version 1.0
 */
@SpringBootApplication
public class SpringSessionApplication {
​
  public static void main(String[] args) {
    SpringApplication.run(SpringSessionApplication.class,args);
  }
}

3.6启动两个实例

3.7测试

访问8080端口设置session


访问8083端口获得session

3.8默认是spring:session做为key前缀有需要改变可以在yml中配置

四nginx反向代理说明

在nginx安装目录的conf文件夹的nginx.conf

 server {
    listen    端口;
    server_name 发布项目的ip地址;

    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    location / {
            proxy_pass 转发的ip地址;
            proxy_connect_timeout 600;
            proxy_read_timeout 600;
    }
  }

配置2个server 分别 监听 8080 8083 端口 配置转发ip ,好后退出保存 nginx -s reload

我们就可以不同的访问转发ip实现nginx的反向代理

五参考文档

https://docs.spring.io/spring-boot/docs/2.0.0.RELEASE/reference/htmlsingle/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Mybatis-Plus saveBatch()批量保存失效的解决

    Mybatis-Plus saveBatch()批量保存失效的解决

    本文主要介绍了Mybatis-Plus saveBatch()批量保存失效的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • java如何读取某个文件夹中的全部文件(包括子文件夹)

    java如何读取某个文件夹中的全部文件(包括子文件夹)

    这篇文章主要介绍了java如何读取某个文件夹中的全部文件(包括子文件夹),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • java 实现数组扩容与缩容案例

    java 实现数组扩容与缩容案例

    这篇文章主要介绍了java 实现数组扩容与缩容案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • RocketMQ Push 消费模型示例详解

    RocketMQ Push 消费模型示例详解

    这篇文章主要为大家介绍了RocketMQ Push 消费模型示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 递归之斐波那契数列java的3种方法

    递归之斐波那契数列java的3种方法

    这篇文章主要为大家详细介绍了递归之斐波那契数列java的3种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 浅谈HashMap、HashTable的key和value是否可为null

    浅谈HashMap、HashTable的key和value是否可为null

    这篇文章主要介绍了浅谈HashMap、HashTable的key和value是否可为null,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java 微信公众号开发相关总结

    Java 微信公众号开发相关总结

    公众号作为主流的自媒体平台,有着不少人使用。这次以文本回复作为案例来讲解Java相关的微信公众号开发
    2021-05-05
  • JAVA中的引用与对象详解

    JAVA中的引用与对象详解

    本文主要介绍了JAVA中引用与对象的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • java基础之String知识总结

    java基础之String知识总结

    今天带大家来回顾一下Java基础,文中详细总结了String的相关知识,对正在学习java基础的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • Java java.lang.InstantiationException异常案例详解

    Java java.lang.InstantiationException异常案例详解

    这篇文章主要介绍了Java java.lang.InstantiationException异常案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08

最新评论