一.環境準備(windows下nginx+tomcat,linux同理)
1.nginx一臺
2.tomcat 2臺(端口號不同,我這里是8081和8082)
3.web項目一個(我這里項目名tomcat-session)
二.詳細配置
1.nginx
在nginx的conf文件下找到nginx.conf將以下位置改成
image.png
2.tomcat
在tomcat的conf文件夾下找到server.xml配置文件進行端口配置,分別配置成8081和8082,和nginx中相同。
image.png
添加虛擬路徑
image.png
3.web項目(tomcat-session)
在build.gradle文件中添加依賴(maven同理)
compile group: 'org.springframework.session', name: 'spring-session-data-redis', version: '1.3.0.RELEASE'
在WEB-INF下創建spring-session.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd" default-autowire="byName">
<context:annotation-config/>
<bean id="sessionConfiguration" class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
<!--修改session的有效時間-->
<property name="maxInactiveIntervalInSeconds" value="1800"></property>
</bean>
<!--本地redis配置,大家自定安裝redis-->
<bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="127.0.0.1"></property>
<property name="port" value="6379"></property>
<property name="password" value="123"></property>
</bean>
</beans>
項目加載的時候加載spring-session.xml,在web.xml中加載它。并添加過濾器。(注意,在所有的過濾器之前)
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-session.xml</param-value>
</context-param>
<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在index.jsp中添加如下代碼(首頁能訪問的到)
項目1:
<body>
SessionID:<%=session.getId()%>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<%
out.println("This is Tomcat Server 1111");
%>
</body>
項目2:
<body>
SessionID:<%=session.getId()%>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<%
out.println("This is Tomcat Server 222");
%>
</body>
三.啟動訪問
啟動redis,(先啟動resdis)和2臺tomcat,nginx。
1,直接訪問2個項目
項目1:
image.png
項目2:
image.png
redis 2次訪問后分布查看結果
image.png
通過上述圖片可以發現兩次的結構是一樣的。
2.通過nginx訪問,(先使用flushall命令清空redis)使用nginx中server_name : localhost 訪問
分發請求到項目1
image.png
分發請求到項目2
image.png
redis:
image.png
同樣通過上述圖片可以看出也實現了session的共享。
四.參考文獻
http://blog.csdn.net/xiaozhaorui/article/details/51326833
http://www.10tiao.com/html/591/201702/2247483939/1.html