您的位置:首頁技術文章
文章詳情頁

Springsession nginx反向代理集成過程

瀏覽:67日期:2023-09-09 17:59:34

一概述

springsession 配置,如果是sevlet的web應用后會自動集成 jdbc ,redis,Hazelcast,MongoDB

二session概述

2.1 分布式項目的session問題

在分布式項目中如果客戶端給服務端發送了一個請求,在nginx做反向代理的情況下,第一個請求可能到達tomcat1,此時tomcat1就會創建一個session然后將響應給客戶端;同理客戶端再次發送一個請求,然后nginx又做了一次反向代理,此時的請求可能到達tomcat2,此時tomcat2會建立一個session響應給客戶端;那么問題就產生了,同一個客戶端發了2個請求,結果造成兩次會話的數據不一致。

Springsession nginx反向代理集成過程

2.2主流的解決方案

針對2.1分布式session共享問題,當代主流的解決方案是使用redis做session以達到session共享的目的。請求達到不同的tomcat之后都會往同一個redis中寫數據, 當tomcat響應數據的時候就會往同一個redis中讀數據 以前我們需要手動的將tomcat獲得的session數據存到redis,響應的時候再去redis中取數據。現在springsession會自動幫我們的數據從tomcat中同步到redis,或者自動的從redis中取數據。

Springsession nginx反向代理集成過程

三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 */@RestControllerpublic 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 */@SpringBootApplicationpublic class SpringSessionApplication {​ public static void main(String[] args) { SpringApplication.run(SpringSessionApplication.class,args); }}

3.6啟動兩個實例

Springsession nginx反向代理集成過程

3.7測試

訪問8080端口設置session

Springsession nginx反向代理集成過程

訪問8083端口獲得session

Springsession nginx反向代理集成過程

3.8默認是spring:session做為key前綴有需要改變可以在yml中配置

Springsession nginx反向代理集成過程

四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/

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
国产综合久久一区二区三区