이 글은 주로 Nginx+Tomcat의 Session 관리에 대해 소개합니다. 이제는 도움이 필요한 친구들이 참고할 수 있도록 공유하겠습니다.
nginx 설치 구성
[root@localhost ~]# yum install nginx
No package nginx available.
[root@localhost ~]# yum install epel-release명령을 실행하세요
[root@localhost nginx]# cd /usr/sbin/
nginx+tomcat load Balancing
1. 각각 8081 및 8082./nginx 开启 ./nginx -s stop 使用kill命令强制杀掉进程 ./nginx -s quit 待nginx进程处理任务完毕进行停止 ./nginx -s reloadwebapps/ROOT의 index.jsp를 수정하여 테스트를 용이하게 합니다
drwxr-xr-x. 9 root root 4096 May 7 14:16 apache-tomcat-7.0.88_8081 drwxr-xr-x. 9 root root 4096 May 7 14:16 apache-tomcat-7.0.88_8082
아래에서 /etc/nginx / nginx.conf를 수정하세요
<% if(request.getSession().getAttribute("key")==null){ out.println("key is null,ready init....."); request.getSession().setAttribute("key","value"); }else{ out.println("key is not null,key="+request.getSession().getAttribute("key")); } %> <br> sessionID:<%=session.getId()%> <br> sessionCreateTime:<%= session.getCreationTime() %> <br> <% out.println("tomcat port 8081"); %>여기에 구성된 로드 밸런싱 전략은 기본 폴링 전략입니다. nginx는 또한 ip_hash, Weight, fair(타사), url_hash(타사)를 포함한 다른 전략도 지원합니다. 기본 전략은 모든 웹 요청이 시간순으로 하나씩 다른 백엔드 서버에 할당되는 것입니다. 이 경우 각 요청에 대해 새 세션이 생성됩니다.
upstream tomcatTest { server 127.0.0.1:8081; #tomcat-8081 server 127.0.0.1:8082; #tomcat-8082 } server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_pass http://tomcatTest; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
두 번째 새로 고침 http://ip/
key is null,ready init..... sessionID:E7A9782DED29FF04E21DF94078CB4F62 sessionCreateTime:1527732911441 tomcat port 8082
세 번째로 http://ip/
key is null,ready init..... sessionID:7812E8E21DBB74CC7FBB75A0DFF2E9CB sessionCreateTime:1527732979810 tomcat port 8081
3.nginx 구성 로드 밸런싱(고정 세션)
각 요청은 다음에 따라 배포됩니다. 각 방문자가 고정된 액세스를 갖도록 액세스 IP의 해시 결과 nginx는 업스트림 모듈에서 ip_hash를 구성하여 고정 세션을 달성할 수 있습니다.
key is null,ready init..... sessionID:8895F41E299785A21995D5F8BB734B86 sessionCreateTime:1527733011878 tomcat port 8082
아래의 간단한 테스트:
첫 번째 요청은 다음과 같습니다. http://ip/upstream tomcatTest { ip_hash; server 127.0.0.1:8081; #tomcat-8081 server 127.0.0.1:8082; #tomcat-8082 }
key is null,ready init..... sessionID:859BADFB09A4ECEAEC5257F518C228A0 sessionCreateTime:1527734181450 tomcat port 8081http://ip/
key is not null,key=value sessionID:859BADFB09A4ECEAEC5257F518C228A0 sessionCreateTime:1527734181450 tomcat port 8081
4번째 새로 고침을 확인하세요. //ip/
key is not null,key=value sessionID:859BADFB09A4ECEAEC5257F518C228A0 sessionCreateTime:1527734181450 tomcat port 8081
다섯 번째 새로고침 http://ip/
key is null,ready init..... sessionID:3C15FE2C8E8A9DCDC6EAD48180B78B80 sessionCreateTime:1527735994476 tomcat port 8082
메시지가 tomcat-8082로 전달되고, 세션이 사라지고, 새로운 세션이 다시 생성되는 것을 확인할 수 있습니다.
방법; 이 상황에서 세션이 손실되는 것을 방지하려면 세션 복제와 세션 공유라는 두 가지 솔루션이 있습니다. 세션 공유는 확장성에서 시작됩니다. 다음은 세션 공유를 구현하는 방법에 중점을 둡니다. Sharing
세션 공유의 개념은 세션을 공개 장소에 저장한 다음 사용할 때 꺼내는 것입니다. 구체적으로 이 공개 장소는 redis, db, memcached 등이 될 수 있습니다. 다음은 redis를 예로 들었습니다.
1.redis 설치 및 구성
key is not null,key=value sessionID:3C15FE2C8E8A9DCDC6EAD48180B78B80 sessionCreateTime:1527735994476 tomcat port 8082설치가 완료된 후 /etc/redis.conf 파일을 구성합니다.
yum install redis클라이언트 터미널 시작
redis-server /etc/redis.conf
2 Tomcat은 종속 jar
redis-cli
3.Tomcat은 구성을 수정합니다
<dependency> <groupId>com.bluejeans</groupId> <artifactId>tomcat-redis-session-manager</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.5.2</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.2</version> </dependency>Tomcat은 개방형 세션 관리 및 지속성 org.apache.catalina를 제공합니다. session.ManagerBase, 이 추상 클래스를 상속하고 몇 가지 간단한 구성을 수행하면 세션 관리 클래스가 Tomcat의 세션 읽기 및 지속성을 인수하도록 할 수 있습니다. 여기서 사용됩니다. 세션을 관리하는 것은 tomcat-redis-session-manager입니다.
4. 테스트
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="localhost" port="6379" database="0" maxInactiveInterval="60"/>
http://ip 새로 고침 /
key is null,ready init..... sessionID:1131499E5A65DE1591152465E7B24B1F sessionCreateTime:1527740273682 tomcat port 8081
두 번째로 tomcat-8081을 중지합니다. 세 번째로 http://ip/
key is not null,key=value sessionID:1131499E5A65DE1591152465E7B24B1F sessionCreateTime:1527740273682 tomcat port 8081를 새로 고치면 현재 메시지가 -8082 노드로 전달된 것을 확인할 수 있습니다. 세션은 변경되지 않았으며 키도 값을 얻을 수 있습니다. 5. redis
key is not null,key=value sessionID:1131499E5A65DE1591152465E7B24B1F sessionCreateTime:1527740273682 tomcat port 8082를 확인하면 세션 개체가 redis에 저장되어 있고 sessionId가 바이너리를 저장하는 키 값으로 사용되는 것을 확인할 수 있습니다. ;위 내용은 모두의 학습에 도움이 되기를 바랍니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 참고해주세요! 관련 권장 사항:
nginx는 역방향 프록시 및 로드 밸런싱을 구현합니다
위 내용은 세션 관리에 대한 Nginx+Tomcat의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!