Maison > Article > développement back-end > Nginx+Tomcat à propos de la gestion des sessions
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 nginxgénère l'erreur suivante :
No package nginx available.Installation de la solution epel : EPEL est l'abréviation de Enterprise Linux Add-on Package. EPEL est créé, maintenu et géré par le groupe d'intérêt spécial Fedora pour Red Hat Enterprise Linux (RHEL) et ses distributions dérivées (telles que CentOS, Scientific Linux, A high-. projet de package logiciel complémentaire de qualité pour Oracle Enterprise Linux);
[root@localhost ~]# yum install epel-releaseAprès l'installation, vous pouvez installer nginx avec succès 2. Démarrez et arrêtez nginx D'abord. entrez dans le répertoire nginx
[root@localhost nginx]# cd /usr/sbin/et exécutez la commande
./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_8082Modifier le fichier index.jsp de webapps/ROOT pour faciliter les tests
<% 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"); %>Le résultat final consiste à spécifier les numéros de port respectifs 8081 et 8081 sous les deux tomcats. 8082Équilibrage de charge de configuration 2.nginx (politique par défaut)Modifier nginx.conf sous /etc/nginx/
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 { } }L'équilibrage de charge. politique configurée ici Il s'agit de la stratégie d'interrogation par défaut. nginx prend également en charge d'autres stratégies, notamment : ip_hash,weight, fair (tiers), url_hash (tiers)
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 8082La deuxième fois. il est actualisé est http:// ip/
key is null,ready init..... sessionID:7812E8E21DBB74CC7FBB75A0DFF2E9CB sessionCreateTime:1527732979810 tomcat port 8081Actualiser http://ip/
key is null,ready init..... sessionID:8895F41E299785A21995D5F8BB734B86 sessionCreateTime:1527733011878 tomcat port 8082pour la troisième fois et vous pouvez constater qu'une nouvelle session est générée chaque temps, et les messages sont attribués à différents messages un par un dans l'ordre chronologique. Les serveurs back-end, généralement les sites Web qui doivent maintenir des sessions ne sont pas autorisés à générer une session pour chaque demande Configuration 3.nginx ; équilibrage de charge (session collante) Chaque requête Distribuée en fonction du résultat de hachage de l'adresse IP accédée, de sorte que chaque visiteur ait un accès fixe à un serveur back-end, ce qui peut résoudre le problème de session nginx peut réaliser une session collante ; Session en configurant ip_hash dans le module amont ;
upstream tomcatTest { ip_hash; server 127.0.0.1:8081; #tomcat-8081 server 127.0.0.1:8082; #tomcat-8082 }Faites le test simple suivant :
Première requête http://ip/
key is null,ready init..... sessionID:859BADFB09A4ECEAEC5257F518C228A0 sessionCreateTime:1527734181450 tomcat port 8081Deuxième actualisation http:// ip/
key is not null,key=value sessionID:859BADFB09A4ECEAEC5257F518C228A0 sessionCreateTime:1527734181450 tomcat port 8081Troisième actualisation http : //ip/
key is not null,key=value sessionID:859BADFB09A4ECEAEC5257F518C228A0 sessionCreateTime:1527734181450 tomcat port 8081On peut constater que key=value est défini dans la première requête et la valeur clé peut être obtenue à chaque fois par la suite. Le sessionId n'a pas changé, et Tomcat n'a pas changé non plus, obtenant une session collante
À 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 8082Le cinquième rafraîchissement de http://ip/
key is not null,key=value sessionID:3C15FE2C8E8A9DCDC6EAD48180B78B80 sessionCreateTime:1527735994476 tomcat port 8082Vous pouvez constater que le message est transmis à tomcat-8082 et que la session est perdue, et une nouvelle session est recréée ;
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 redisUne fois l'installation terminée, configurez le fichier /etc/redis.conf
Démarrez le serveur redis
redis-server /etc/redis.confDémarrez le client
redis-cli2 Tomcat introduit les jars dépendants$TOMCAT_HOME. /lib et ajoute le package jar suivant
<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>3. Tomcat modifie la configurationModifie context.xml dans le répertoire $TOMCAT_HOME/conf Fichier
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="localhost" port="6379" database="0" maxInactiveInterval="60"/>Tomcat fournit une gestion de session ouverte et une persistance org.apache.catalina.session.ManagerBase. Héritez de cette classe abstraite et effectuez quelques configurations simples pour activer la gestion de votre session. La classe prend en charge la lecture et la persistance de session de Tomcat. est utilisé ici pour gérer la session ;
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 8081Arrêtez Tomcat-8081 et actualisez http://ip/
key is not null,key=value sessionID:1131499E5A65DE1591152465E7B24B1F sessionCreateTime:1527740273682 tomcat port 8081pour la troisième fois. Vous pouvez constater que le message a été transmis au nœud tomcat-8082, mais la session n'a pas changé et la clé peut également obtenir le value; 5. Vérifiez redis
key is not null,key=value sessionID:1131499E5A65DE1591152465E7B24B1F sessionCreateTime:1527740273682 tomcat port 8082et vous constaterez que l'objet de session a été stocké dans redis et que le sessionId est utilisé comme valeur clé pour stocker la session binaire. data; Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de tout le monde. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
[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!