Heim > Artikel > Backend-Entwicklung > Nginx+Tomcat über Sitzungsverwaltung
Dieser Artikel stellt hauptsächlich die Sitzungsverwaltung von Nginx+Tomcat vor, die einen gewissen Referenzwert hat. Jetzt kann ich ihn mit allen teilen, die ihn benötigen
Nginx + Tomcat hat die Verwaltung von Sitzungen immer verstanden, sie jedoch nie geübt. Dieser Artikel beginnt mit der einfachsten Installation und dem einfachsten Start und stellt anhand von Beispielen Schritt für Schritt verschiedene Möglichkeiten vor, Sitzungen zu verwalten.
[root@localhost ~]# yum install nginx
führt zu folgendem Fehler:
No package nginx available.
Lösung zur Installation von Epel: EPEL EPEL ist die Abkürzung für Enterprise Linux Add-on Package. EPEL wird von der Fedora Special Interest Group für Red Hat Enterprise Linux (RHEL) und seine abgeleiteten Distributionen (wie CentOS, Scientific Linux, Oracle Enterprise Linux) erstellt, verwaltet und verwaltet hochwertiges Add-on-Softwarepaketprojekt;
[root@localhost ~]# yum install epel-release
Nach der Installation können Sie nginx erfolgreich installieren.
[root@localhost nginx]# cd /usr/sbin/
Führen Sie den Befehl aus
./nginx 开启 ./nginx -s stop 使用kill命令强制杀掉进程 ./nginx -s quit 待nginx进程处理任务完毕进行停止 ./nginx -s reloadnginx+tomcat Load Balancing
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"); %>
Die endgültige Ausgabe besteht darin, die jeweiligen Portnummern 8081 und 8082 unter den beiden Tomcats anzugeben
2.nginx-Konfigurationslast Balancing (Standardrichtlinie)
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 { } }
Die hier konfigurierte Lastausgleichsrichtlinie ist die Standardabfragerichtlinie und unterstützt auch andere Richtlinien, einschließlich: ip_hash, Gewichtung , fair (Dritter), url_hash (Dritter);
Standardrichtlinie Jede Webanfrage wird nacheinander in chronologischer Reihenfolge verschiedenen Back-End-Servern zugewiesen. In diesem Fall wird wie folgt eine neue Sitzung erstellt Führen Sie einen einfachen Test durch:Zum ersten Mal http://ip/ anfordern
key is null,ready init..... sessionID:E7A9782DED29FF04E21DF94078CB4F62 sessionCreateTime:1527732911441 tomcat port 8082
key is null,ready init..... sessionID:7812E8E21DBB74CC7FBB75A0DFF2E9CB sessionCreateTime:1527732979810 tomcat port 8081
Zum dritten Mal http aktualisieren ://ip /
key is null,ready init..... sessionID:8895F41E299785A21995D5F8BB734B86 sessionCreateTime:1527733011878 tomcat port 8082
Sie können feststellen, dass jedes Mal eine neue Sitzung generiert wird und die Nachrichten nacheinander in chronologischer Reihenfolge an verschiedene Back-End-Server verteilt werden. Im Allgemeinen handelt es sich um Websites, die Sitzungen verwalten müssen Es ist nicht erlaubt, bei jeder Anfrage eine Sitzung zu generieren dass jeder Besucher einen festen Zugriff auf einen Back-End-Server hat, der das Sitzungsproblem lösen kann; nginx kann durch die Konfiguration von ip_hash im Upstream-Modul einen einfachen Test durchführen:
Erste Anfrage http://ip/upstream tomcatTest { ip_hash; server 127.0.0.1:8081; #tomcat-8081 server 127.0.0.1:8082; #tomcat-8082 }Kapitel Nach der Aktualisierung von 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 8081Beim dritten Mal können Sie feststellen, dass in der ersten Anfrage der Schlüsselwert festgelegt ist und sich die Sitzungs-ID und der Tomcat nicht geändert haben, wodurch eine Sticky-Sitzung erreicht wird > Zu diesem Zeitpunkt können Sie den Tomcat mit Port = 8081 stoppen und dann
die vierte Aktualisierung von http://ip /
key is not null,key=value sessionID:859BADFB09A4ECEAEC5257F518C228A0 sessionCreateTime:1527734181450 tomcat port 8081beobachten, wenn Sie http://ip/ zum fünften Mal aktualisieren 🎜>
key is null,ready init..... sessionID:3C15FE2C8E8A9DCDC6EAD48180B78B80 sessionCreateTime:1527735994476 tomcat port 8082
Sie können feststellen, dass die Nachricht an tomcat-8082 weitergeleitet wird und die Sitzung verloren geht und eine neue Sitzung neu erstellt wird.
Wie man es macht In diesem Fall geht die Sitzung nicht verloren , und es gibt zwei Lösungen: Sitzungsreplikation und Sitzungsfreigabe; Die Sitzungsfreigabe ist hinsichtlich Skalierbarkeit und Leistung besser. Im Folgenden wird erläutert, wie die Sitzungsfreigabe implementiert wird >Die Idee der Sitzungsfreigabe besteht darin, die Sitzung an einem öffentlichen Ort zu speichern und sie dann bei Verwendung herauszunehmen. Der spezifische öffentliche Ort kann sein: Redis, DB, Memcached usw. Das Folgende ist Redis als Beispiel
1.redis-Installationskonfiguration
key is not null,key=value sessionID:3C15FE2C8E8A9DCDC6EAD48180B78B80 sessionCreateTime:1527735994476 tomcat port 8082Nach Abschluss der Installation konfigurieren Sie die Datei /etc/redis.conf
Starten Sie den Redis-Server
yum install redis
Starten Sie das Client-Terminal
redis-server /etc/redis.conf2. Tomcat führt das abhängige JAR ein
redis-cli
Ändern Sie die Datei context.xml im Verzeichnis /conf
<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>
RedisSessionManager erbt von der Klasse org.apache.catalina.session.ManagerBase ist Alle sitzungsbezogenen Vorgänge fallen in diese Kategorie;
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="localhost" port="6379" database="0" maxInactiveInterval="60"/>Zweite Aktualisierung 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 8081zum dritten Mal und Sie können feststellen, dass die Nachricht an den Tomcat-8082-Knoten weitergeleitet wurde, die Sitzung jedoch nicht Ändern, und der Schlüssel kann auch den Wert erhalten; 5. Überprüfen Sie redis
rrree
und Sie können feststellen, dass das Sitzungsobjekt in Redis gespeichert wurde und die Sitzungs-ID als Schlüssel verwendet wird Wert zum Speichern der Binärdaten der Sitzung. ;
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für alle zum Lernen hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website !
Das obige ist der detaillierte Inhalt vonNginx+Tomcat über Sitzungsverwaltung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!