Springsession nginx反向代理集成过程

网友投稿 440 2022-12-09


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

org.springframework.boot

spring-boot-starter-parent

2.1.1.RELEASE

org.springframework.boot

spring-boot-starter-data-redis

org.springframework.boot

http://spring-boot-starter-web

org.springframework.session

spring-session-data-redis

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(SpringSessiohttp://nApplication.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/


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Springboot实现多文件上传代码解析
下一篇:Springboot自定义banner及验证过程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~