Analyse der Lösung für das Problem der gemeinsamen Nutzung von Nginx-Sitzungen

Analyse der Lösung für das Problem der gemeinsamen Nutzung von Nginx-Sitzungen

Dieser Artikel stellt hauptsächlich die Lösung für das Problem der gemeinsamen Nutzung von Nginx-Sitzungen vor. Der Beispielcode im Artikel ist sehr detailliert und hat einen gewissen Referenzwert für das Studium oder die Arbeit aller. Freunde in Not können darauf zurückgreifen.

Nginx löst das Problem der Sitzungsfreigabe:

1. Lastenausgleich mit nginx oder haproxy. Für den Lastenausgleich mit nginx können Sie die ip_hash-Konfiguration hinzufügen. Für den Lastenausgleich mit haproxy können Sie die Balance-Source-Konfiguration verwenden, sodass Anfragen mit einer IP an denselben Server gesendet werden.

2. Verwenden Sie die Datenbank, um Sitzungen zu synchronisieren;

3. Verwenden Sie Cookies, um Sitzungsdaten zu synchronisieren, aber die Sicherheit ist schlecht und HTTP-Anfragen müssen Parameter enthalten, was den Bandbreitenverbrauch erhöht.

4.Tomcat konfiguriert die Sitzungsfreigabe;

5. Verwenden Sie einen Sitzungscluster, um Redis zu speichern.

1: Erstellen Sie ein Projekt und starten Sie zwei Tomcats

2: Schreiben Sie einen Servlet-Test

Paket com.zn.servlet;

importiere javax.servlet.ServletException;
importiere javax.servlet.annotation.WebServlet;
importiere javax.servlet.http.HttpServlet;
importiere javax.servlet.http.HttpServletRequest;
importiere javax.servlet.http.HttpServletResponse;
importiere java.io.IOException;

@WebServlet("/nginxSessionServlet")
öffentliche Klasse SessionIPServlet erweitert HttpServlet {
  geschützt void doPost(HttpServletRequest Anfrage, HttpServletResponse Antwort) wirft ServletException, IOException {
    System.out.println("Aktueller Anforderungsport: "+request.getLocalPort());
    Zeichenfolgenaktion = Anfrage.getParameter("Aktion");
    //Daten in der Sitzung speichern if(action.equals("setSession")){
      request.getSession().setAttribute("Benutzername","zhangsan");
    }sonst wenn(Aktion.equals("getSession")){
      response.getWriter().write((String)request.getSession().getAttribute("Benutzername"));
    }
  }

  geschützt void doGet(HttpServletRequest Anfrage, HttpServletResponse Antwort) wirft ServletException, IOException {
    doPost(Anfrage,Antwort);
  }
}

3. Zugriff auf die Effektanzeige ohne Nginx

Access 8080 bzw. 8081

4. Konfigurieren Sie die Datei nginx.conf

Upstream meinServer{
     ip_hash;
     Server 127.0.0.1:8080;
     Server 127.0.0.1:8081;
  }
  Server{
    hören 81;
    Servername www.bproject.com;
    Standort / {
      Stamm-HTML;
      Proxy-Passwort http://meinServer;
      Index Index.html Index.htm;
    }
  }

5. Besuchen Sie uns erneut

Methode 2: Verwenden Sie Spring-Session + Redis, um die Sitzungsfreigabe zu implementieren

1: Abhängigkeiten importieren

<!--Grundkonfiguration der Spring Boot- und Redis-Anwendungsumgebung-->
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-redis -->
    <Abhängigkeit>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-redis</artifactId>
    </Abhängigkeit>

    <!--Grundkonfiguration der Spring-Sitzung und der Redis-Anwendungsumgebung. Sie müssen Redis aktivieren, bevor Sie es verwenden können. Andernfalls wird beim Starten von Spring Boot eine Fehlermeldung angezeigt-->
    <Abhängigkeit>
      <groupId>org.springframework.session</groupId>
      <artifactId>Spring-Sitzungsdaten-Redis</artifactId>
    </Abhängigkeit>

2: Erstellen Sie einen Controller-Test

@RestController
öffentliche Klasse SessionController {

  @RequestMapping("/setSession")
  public String setSession(HttpServletResponse Antwort, HttpServletRequest Anfrage) löst IOException aus {
    request.getSession().setAttribute("Benutzername","wang");
    gebe "Erfolg" zurück;
  }

  @RequestMapping("/getSession")
  öffentliche Zeichenfolge getSession(HttpServletRequest-Anfrage,HttpServletResponse-Antwort){
    String-Benutzername = (String) request.getSession().getAttribute("Benutzername");
    Benutzernamen zurückgeben;
  }
}

3: Datei application.properties

server.port=8082
#server.port=8083

#redis-Konfiguration spring.redis.password: wang2003

4: Beginnen Sie mit dem Testen des Projekts

Fazit: Diese Lösung ist einfach zu konfigurieren, die Daten sind sicher und stabil, effizient und weit verbreitet;

Hinweis: Nach dem Löschen dieses Datenpakets in Redis kann die Sitzung nicht über die Ports 8082 und 8083 abgerufen werden. Dies bedeutet, dass die Sitzung nicht in der JVM vorhanden ist, sondern an Redis übertragen wird.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung zweier Möglichkeiten zur Implementierung der Sitzungspersistenz im Nginx-Reverse-Proxy
  • Implementierung der Sitzungsverwaltung mit Nginx+Tomcat
  • nginx + redis realisiert Sitzungsfreigabe
  • nginx+tomcat implementiert Lastenausgleich und verwendet Redis-Sitzungsfreigabe
  • Beispiel einer Methode zur gemeinsamen Sitzungskonfiguration in Nginx
  • Nginx-Lastausgleich für gemeinsam genutzte Sitzungen an mehreren Standorten
  • Implementierung der Nginx-Arbeitsprozessschleife
  • Detaillierte Erläuterung der zugrunde liegenden Implementierungsmethode des Nginx-Polling-Algorithmus
  • Nginx leitet dynamisch an Upstream weiter, entsprechend dem Pfad in der URL
  • Implementierungsschritte von nginx zum Erstellen einer Python-basierten Webumgebung

<<:  Grundlegende Anwendungsbeispiele für Listener in Vue

>>:  Implementierung der MySQL-Mehrversions-Parallelitätskontrolle MVCC

Artikel empfehlen

Spezifische Verwendung des Vollbild-Scrollens von fullpage.js

1.fullpage.js Download-Adresse https://github.com...

Beispielcode zur Implementierung einer Auto-Increment-Sequenz in MySQL

1. Erstellen Sie eine Sequenztabelle CREATE TABLE...

Bei MySQL-Zeichentypen wird die Groß-/Kleinschreibung beachtet.

Standardmäßig sind MySQL-Zeichentypen nicht case-...

Vue verwendet Canvas-Handschrifteingabe, um Chinesisch zu erkennen

Effektbild: Vorwort: Kürzlich arbeitete ich an ei...

So stoppen Sie die CSS-Animation mittendrin und behalten die Haltung bei

Vorwort Ich bin einmal auf ein schwieriges Proble...

Über Zabbix Admin-Login vergessen Passwort zurücksetzen

Das Problem beim Zurücksetzen des Passworts für d...

Erläuterung synthetischer React-Ereignisse

Inhaltsverzeichnis Klicken Sie zunächst auf das E...

Grafisches Tutorial zur Installation und Konfiguration von CenOS6.7 mysql 8.0.22

CenOS6.7 installiert MySQL8.0.22 (empfohlene Samm...

So stellen Sie MySQL so ein, dass die Groß-/Kleinschreibung nicht beachtet wird

MySQL auf Groß-/Kleinschreibung eingestellt Windo...

So löschen Sie Standardformate und legen allgemeine Formate in CSS fest

CSS Standard-Stile löschen Die üblichen klaren St...

Detaillierte Erläuterung des Linux-Befehls zur Änderung des Hostnamens

Linux-Befehl zum Ändern des Hostnamens 1. Wenn Si...

Umfassende Erklärung zu dynamischem SQL von MyBatis

Inhaltsverzeichnis Vorwort Dynamisches SQL 1. Sch...