>백엔드 개발 >PHP 튜토리얼 >세션 관리에 대한 Nginx+Tomcat

세션 관리에 대한 Nginx+Tomcat

不言
不言원래의
2018-07-07 16:16:531342검색

이 글은 주로 Nginx+Tomcat의 Session 관리에 대해 소개합니다. 이제는 도움이 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

Nginx+Tomcat은 항상 잘 해왔습니다. 세션 관리 이해는 있지만 실제로 해본 적은 없습니다. 이 글은 가장 간단한 설치와 시작부터 시작하여, 점차적으로 예제를 통해 세션을 관리하는 여러 가지 방법을 소개합니다.

nginx 설치 구성

1. nginx
[root@localhost ~]# yum install nginx

를 설치하면 다음 오류가 발생합니다.

No package nginx available.

해결 방법 epel 설치: EPEL은 Enterprise Edition Linux 애드온 소프트웨어 패키지의 약어입니다. Fedora Special Interest Group은 Red Hat Enterprise Linux(RHEL) 및 파생 배포판(예: CentOS, Scientific Linux, Oracle Enterprise Linux)을 위한 고품질 추가 기능 소프트웨어 패키지 프로젝트를 유지 관리합니다. nginx를 성공적으로 설치할 수 있습니다.

2. nginx 시작 및 중지

먼저 nginx 디렉터리에 들어가세요

[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 reload
webapps/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

최종 출력은 두 Tomcat 아래의 각 포트 번호 8081 및 8082를 지정합니다.

2.nginx는 로드 밸런싱을 구성합니다(기본 정책)

아래에서 /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(타사)를 포함한 다른 전략도 지원합니다. 기본 전략은 모든 웹 요청이 시간순으로 하나씩 다른 백엔드 서버에 할당되는 것입니다. 이 경우 각 요청에 대해 새 세션이 생성됩니다.

첫 번째 요청은 http://ip입니다. /

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
}

두 번째로 http://ip/

key is null,ready init..... 
sessionID:859BADFB09A4ECEAEC5257F518C228A0 
sessionCreateTime:1527734181450
tomcat port 8081
http://ip/

key is not null,key=value 
sessionID:859BADFB09A4ECEAEC5257F518C228A0 
sessionCreateTime:1527734181450
tomcat port 8081

를 세 번째로 새로 고치면 첫 번째 요청에 key=value가 설정되어 있는 것을 확인할 수 있습니다. . 이후에는 매번 키 값을 얻을 수 있습니다. Tomcat에는 변경 사항이 없으며, 고정 세션이 구현됩니다. 이번에는 포트=8081로 Tomcat을 중지한 다음

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 파일을 구성합니다.

redis 서버 시작
yum install redis
클라이언트 터미널 시작

redis-server /etc/redis.conf

2 Tomcat은 종속 jar

$을 도입합니다. TOMCAT_HOME/lib 및 다음 jar 패키지를 추가합니다

redis-cli

3.Tomcat은 구성을 수정합니다

$TOMCAT_HOME/conf 디렉토리의 context.xml 파일을 수정합니다

<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입니다.

RedisSessionManager는 다음에서 상속합니다. org.apache.catalina.session.ManagerBase 클래스 및 세션의 모든 관련 작업이 이 클래스에 있습니다.

4. 테스트

처음으로 http 요청 ://ip/

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.