您好,登錄后才能下訂單哦!
這篇文章主要講解了實(shí)現(xiàn)Springsession nginx反向代理集成的方法,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。
一概述
springsession 配置,如果是sevlet的web應(yīng)用后會(huì)自動(dòng)集成 jdbc ,redis,Hazelcast,MongoDB
二session概述
2.1 分布式項(xiàng)目的session問題
在分布式項(xiàng)目中如果客戶端給服務(wù)端發(fā)送了一個(gè)請(qǐng)求,在nginx做反向代理的情況下,第一個(gè)請(qǐng)求可能到達(dá)tomcat1,此時(shí)tomcat1就會(huì)創(chuàng)建一個(gè)session然后將響應(yīng)給客戶端;同理客戶端再次發(fā)送一個(gè)請(qǐng)求,然后nginx又做了一次反向代理,此時(shí)的請(qǐng)求可能到達(dá)tomcat2,此時(shí)tomcat2會(huì)建立一個(gè)session響應(yīng)給客戶端;那么問題就產(chǎn)生了,同一個(gè)客戶端發(fā)了2個(gè)請(qǐng)求,結(jié)果造成兩次會(huì)話的數(shù)據(jù)不一致。
2.2主流的解決方案
針對(duì)2.1分布式session共享問題,當(dāng)代主流的解決方案是使用redis做session以達(dá)到session共享的目的。請(qǐng)求達(dá)到不同的tomcat之后都會(huì)往同一個(gè)redis中寫數(shù)據(jù), 當(dāng)tomcat響應(yīng)數(shù)據(jù)的時(shí)候就會(huì)往同一個(gè)redis中讀數(shù)據(jù) 以前我們需要手動(dòng)的將tomcat獲得的session數(shù)據(jù)存到redis,響應(yīng)的時(shí)候再去redis中取數(shù)據(jù)?,F(xiàn)在springsession會(huì)自動(dòng)幫我們的數(shù)據(jù)從tomcat中同步到redis,或者自動(dòng)的從redis中取數(shù)據(jù)。
三session共享實(shí)現(xiàn)方案
3.1環(huán)境說明
1jdk1.8
2redis5.05
3idea工具
4maven構(gòu)建
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啟動(dòng)器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- web啟動(dòng)器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- spring session啟動(dòng)器 --> <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("設(shè)置session"); return "set spring session success"; } @GetMapping("get/spring/session") public String getSpringSession(HttpSession httpSession){ httpSession.setAttribute("user","youku1327"); System.out.println("響應(yīng)session"); return httpSession.getAttribute("user").toString(); } }
3.5啟動(dòng)類
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啟動(dòng)兩個(gè)實(shí)例
3.7測(cè)試
訪問8080端口設(shè)置session
訪問8083端口獲得session
3.8默認(rèn)是spring:session做為key前綴有需要改變可以在yml中配置
四nginx反向代理說明
在nginx安裝目錄的conf文件夾的nginx.conf
server { listen 端口; server_name 發(fā)布項(xiàng)目的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 轉(zhuǎn)發(fā)的ip地址; proxy_connect_timeout 600; proxy_read_timeout 600; } }
配置2個(gè)server 分別 監(jiān)聽 8080 8083 端口 配置轉(zhuǎn)發(fā)ip ,好后退出保存 nginx -s reload
我們就可以不同的訪問轉(zhuǎn)發(fā)ip實(shí)現(xiàn)nginx的反向代理
看完上述內(nèi)容,是不是對(duì)實(shí)現(xiàn)Springsession nginx反向代理集成的方法有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。