Cet article présente principalement la gestion de session de Nginx+Tomcat, qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
[root@localhost ~]# yum install nginx
No package nginx available.
[root@localhost ~]# yum install epel-release
[root@localhost nginx]# cd /usr/sbin/
./nginx 开启 ./nginx -s stop 使用kill命令强制杀掉进程 ./nginx -s quit 待nginx进程处理任务完毕进行停止 ./nginx -s reload
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
<% 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"); %>
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 { } }
La stratégie par défaut attribue chaque requête Web à différents serveurs backend un par un ; par ordre chronologique. , dans ce cas, une nouvelle session sera créée pour chaque requête Faisons un test simple :
La première requête est http://ip/
key is null,ready init..... sessionID:E7A9782DED29FF04E21DF94078CB4F62 sessionCreateTime:1527732911441 tomcat port 8082
key is null,ready init..... sessionID:7812E8E21DBB74CC7FBB75A0DFF2E9CB sessionCreateTime:1527732979810 tomcat port 8081
key is null,ready init..... sessionID:8895F41E299785A21995D5F8BB734B86 sessionCreateTime:1527733011878 tomcat port 8082
upstream tomcatTest { ip_hash; server 127.0.0.1:8081; #tomcat-8081 server 127.0.0.1:8082; #tomcat-8082 }
Première requête http://ip/
key is null,ready init..... sessionID:859BADFB09A4ECEAEC5257F518C228A0 sessionCreateTime:1527734181450 tomcat port 8081
key is not null,key=value sessionID:859BADFB09A4ECEAEC5257F518C228A0 sessionCreateTime:1527734181450 tomcat port 8081
key is not null,key=value sessionID:859BADFB09A4ECEAEC5257F518C228A0 sessionCreateTime:1527734181450 tomcat port 8081
À ce moment, vous pouvez arrêter Tomcat avec port=8081, puis observer
La quatrième actualisation de http:/ /ip/
key is null,ready init..... sessionID:3C15FE2C8E8A9DCDC6EAD48180B78B80 sessionCreateTime:1527735994476 tomcat port 8082
key is not null,key=value sessionID:3C15FE2C8E8A9DCDC6EAD48180B78B80 sessionCreateTime:1527735994476 tomcat port 8082
Comment éviter que la session ne soit perdue dans cette situation, il existe deux solutions : la réplication de session et le partage de session sont meilleurs en termes d'évolutivité et de performances. comment implémenter le partage de session ;
yum install redis
Démarrez le serveur redis
redis-server /etc/redis.conf
redis-cli
<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>
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="localhost" port="6379" database="0" maxInactiveInterval="60"/>
RedisSessionManager hérite de la classe org.apache.catalina.session.ManagerBase, et les opérations associées sur la session sont toutes dans cette catégorie ; 🎜>
La première requête est http://ip/
key is null,ready init..... sessionID:1131499E5A65DE1591152465E7B24B1F sessionCreateTime:1527740273682 tomcat port 8081
key is not null,key=value sessionID:1131499E5A65DE1591152465E7B24B1F sessionCreateTime:1527740273682 tomcat port 8081
key is not null,key=value sessionID:1131499E5A65DE1591152465E7B24B1F sessionCreateTime:1527740273682 tomcat port 8082
[root@localhost ~]# redis-cli 127.0.0.1:6379> keys * 1) "1131499E5A65DE1591152465E7B24B1F" 127.0.0.1:6379> get 1131499E5A65DE1591152465E7B24B1F "\xac\xed\x00\x05sr\x00Dcom.orangefunction.tomcat.redissessions.SessionSerializationMetadataB\xd9\xd9\xf7v\xa2\xdbL\x03\x00\x01[\x00\x15sessionAttributesHasht\x00\x02[Bxpw\x14\x00\x00\x00\x10}\xc8\xc9\xcf\xf6\xc3\xb5Y\xc7\x0c\x8eF\xa5\xfaQ\xe8xsr\x00\x0ejava.lang.Long;\x8b\xe4\x90\xcc\x8f#\xdf\x02\x00\x01J\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x01c\xb4j\x94\x12sq\x00~\x00\x03\x00\x00\x01c\xb4j\x94\x12sr\x00\x11java.lang.Integer\x12\xe2\xa0\xa4\xf7\x81\x878\x02\x00\x01I\x00\x05valuexq\x00~\x00\x04\x00\x00\a\bsr\x00\x11java.lang.Boolean\xcd r\x80\xd5\x9c\xfa\xee\x02\x00\x01Z\x00\x05valuexp\x01q\x00~\x00\nsq\x00~\x00\x03\x00\x00\x01c\xb4j\x94*t\x00 1131499E5A65DE1591152465E7B24B1Fsq\x00~\x00\a\x00\x00\x00\x01t\x00\x03keyt\x00\x05valuew\b\x00\x00\x01c\xb4j\x94\x12"
Recommandations associées :
nginx implémente le proxy inverse et l'équilibrage de chargeCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!