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

Detaillierte Erklärung zur Verwendung von MySQL, wobei

Inhaltsverzeichnis 1. Einleitung 2. Haupttext 2.1...

CSS Clear Float Clear:Both Beispielcode

Heute werde ich mit Ihnen über das Löschen von Fl...

Detaillierte Erläuterung der Verwendung der Vue3-Statusverwaltung

Inhaltsverzeichnis Hintergrund Bereitstellen / In...

Über die Position des H1-Tags in XHTML

In letzter Zeit wurde viel über H1 diskutiert (auf...

Zusammenfassung der Erfahrungen mit der Verwendung des Div-Box-Modells

Berechnung des Boxmodells <br />Rand + Rahme...

Fügen Sie dem Debian-Docker-Container geplante Crontab-Aufgaben hinzu

Mittlerweile basieren die meisten Docker-Images a...

So fügen Sie Nginx zu den Systemdiensten in CentOS7 hinzu

Einführung Nach dem Kompilieren, Installieren und...

Implementierung der Änderung von Konfigurationsdateien im Docker-Container

1. Betreten Sie den Container docker run [Option]...

Unterschiede zwischen diesem Schlüsselwort in NodeJS und Browsern

Vorwort Jeder, der JavaScript gelernt hat, muss s...