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

Tipps zum Anzeigen von Text in Linux (super praktisch!)

Vorwort Bei der täglichen Entwicklung müssen wir ...

Detaillierte Erklärung der integrierten Methoden des Javascript-Arrays

Inhaltsverzeichnis 1. Array.at() 2. Array.copyWit...

HTML lädt dynamisch CSS-Stile und JS-Skripte – Beispiel

1. Dynamisches Laden von Skripten Mit der wachsen...

So installieren und konfigurieren Sie MySQL 5.7.19 unter CentOS 6.5

Die detaillierten Schritte zur Installation von m...

Detaillierte Erklärung von Group By und Having in MySQL

Mit der GROUP BY-Syntax können die Abfrageergebni...

So verwenden Sie JS zum Implementieren des Wasserfalllayouts von Webseiten

Inhaltsverzeichnis Vorwort: Was ist ein Wasserfal...

VPS erstellt Offline-Download-Server (nach der Ära der Netzwerkfestplatten)

Motivation Aus Lerngründen habe ich einen VPS-Die...

Docker löst das Problem, dass das Terminal kein Chinesisch eingeben kann

Vorwort: Eines Tages baute ich einen MySQL-Dienst...

Tutorial zur Installation von MySQL unter CentOS7

Vor kurzem habe ich vor, eine Cloud-Festplatte au...

UDP DUP-Timeout UPD-Portstatus-Erkennungscodebeispiel

Ich habe bereits zuvor ein Beispiel geschrieben, ...