Heim > Backend-Entwicklung > PHP-Tutorial > Nginx+Tomcat über Sitzungsverwaltung

Nginx+Tomcat über Sitzungsverwaltung

不言
Freigeben: 2023-04-02 20:28:02
Original
1343 Leute haben es durchsucht

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

Vorwort

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.

nginx-Installationskonfiguration

1. Die Installation von nginx

[root@localhost ~]# yum install nginx
Nach dem Login kopieren

führt zu folgendem Fehler:

No package nginx available.
Nach dem Login kopieren

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 dem Login kopieren

Nach der Installation können Sie nginx erfolgreich installieren.

Betreten Sie zunächst das Verzeichnis von nginx

[root@localhost nginx]# cd /usr/sbin/
Nach dem Login kopieren

Führen Sie den Befehl aus

./nginx 开启
./nginx -s stop  使用kill命令强制杀掉进程
./nginx -s quit  待nginx进程处理任务完毕进行停止
./nginx -s reload
Nach dem Login kopieren

nginx+tomcat Load Balancing

1. Bereiten Sie 2 Tomcats vor, geben Sie die Ports 8081 bzw. 8082 an

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
Nach dem Login kopieren

Ändern Sie die index.jsp von webapps/ROOT, um das Testen zu erleichtern

<%
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");   
%>
Nach dem Login kopieren

Die endgültige Ausgabe besteht darin, die jeweiligen Portnummern 8081 und 8082 unter den beiden Tomcats anzugeben

2.nginx-Konfigurationslast Balancing (Standardrichtlinie)

Ändern Sie nginx.conf unter /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 {
    }
}
Nach dem Login kopieren

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
Nach dem Login kopieren

Zum zweiten Mal aktualisieren http://ip/
key is null,ready init..... 
sessionID:7812E8E21DBB74CC7FBB75A0DFF2E9CB 
sessionCreateTime:1527732979810
tomcat port 8081
Nach dem Login kopieren

Zum dritten Mal http aktualisieren ://ip /

key is null,ready init..... 
sessionID:8895F41E299785A21995D5F8BB734B86 
sessionCreateTime:1527733011878
tomcat port 8082
Nach dem Login kopieren

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
}
Nach dem Login kopieren
Kapitel Nach der Aktualisierung von http://ip/

key is null,ready init..... 
sessionID:859BADFB09A4ECEAEC5257F518C228A0 
sessionCreateTime:1527734181450
tomcat port 8081
Nach dem Login kopieren

zum zweiten Mal und der Aktualisierung von http://ip/

key is not null,key=value 
sessionID:859BADFB09A4ECEAEC5257F518C228A0 
sessionCreateTime:1527734181450
tomcat port 8081
Nach dem Login kopieren
Nach dem Login kopieren
Beim 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 8081
Nach dem Login kopieren
Nach dem Login kopieren
beobachten, wenn Sie http://ip/ zum fünften Mal aktualisieren 🎜>
key is null,ready init..... 
sessionID:3C15FE2C8E8A9DCDC6EAD48180B78B80 
sessionCreateTime:1527735994476
tomcat port 8082
Nach dem Login kopieren

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 8082
Nach dem Login kopieren
Nach Abschluss der Installation konfigurieren Sie die Datei /etc/redis.conf

Starten Sie den Redis-Server

yum install redis
Nach dem Login kopieren

Starten Sie das Client-Terminal

redis-server /etc/redis.conf
Nach dem Login kopieren
2. Tomcat führt das abhängige JAR ein

$TOMCAT_HOME/lib und fügt das folgende JAR-Paket hinzu
redis-cli
Nach dem Login kopieren

3.Tomcat ändert die Konfiguration

Ä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>
Nach dem Login kopieren

Tomcat bietet eine offene Sitzungsverwaltung und Persistenz org.apache.catalina.session.ManagerBase. Erben Sie diese abstrakte Klasse und nehmen Sie einige einfache Konfigurationen vor , nämlich Es ermöglicht Ihrer Sitzungsverwaltungsklasse, das Sitzungslesen und die Persistenz von Tomcat zu übernehmen.

RedisSessionManager erbt von der Klasse org.apache.catalina.session.ManagerBase ist Alle sitzungsbezogenen Vorgänge fallen in diese Kategorie;

4.Erste Anfrage http://ip/

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
         host="localhost"
         port="6379"
         database="0"
         maxInactiveInterval="60"/>
Nach dem Login kopieren
Zweite Aktualisierung http://ip/

key is null,ready init..... 
sessionID:1131499E5A65DE1591152465E7B24B1F 
sessionCreateTime:1527740273682
tomcat port 8081
Nach dem Login kopieren

Stoppen Sie Tomcat-8081, aktualisieren Sie http://ip/

key is not null,key=value 
sessionID:1131499E5A65DE1591152465E7B24B1F 
sessionCreateTime:1527740273682
tomcat port 8081
Nach dem Login kopieren
zum 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 !

Verwandte Empfehlungen:

nginx implementiert Reverse-Proxy und Lastausgleich

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage