Heim Backend-Entwicklung PHP-Tutorial Lösen Sie das Sitzungsfreigabeproblem des Nginx-Lastausgleichs

Lösen Sie das Sitzungsfreigabeproblem des Nginx-Lastausgleichs

Jul 29, 2016 am 09:15 AM
cookie memcache mysql nginx session

Ich habe einige Informationen überprüft und einige von anderen geschriebene Dokumente gelesen. Die Zusammenfassung lautet wie folgt, um die gemeinsame Nutzung von Nginx-Sitzungen zu realisieren.

Es gibt mehrere PHP-Server und Nginx wird für den Lastausgleich verwendet Dieselbe IP kann auf dieselbe Seite zugreifen. Wenn die Sitzung nicht synchronisiert ist, treten viele Probleme auf, z. B. der häufigste Anmeldestatus. Hier gibt es mehrere Möglichkeiten, das Problem der Sitzungsfreigabe zu lösen >

1. Verwenden Sie anstelle der Sitzung ein Cookie

Die Sitzung wird auf der Serverseite gespeichert, und das Cookie wird auf der Clientseite gespeichert. Wir können die durch den Zugriff des Benutzers auf die Seite generierte Sitzung ablegen das Cookie, welches das Cookie als Übergabestation nutzen soll. Sie besuchen Webserver A, generieren eine Sitzung und legen sie in einem Cookie ab. Wenn Ihre Anfrage Server B zugewiesen wird, stellt Server B zunächst fest, ob der Server über die Sitzung verfügt. Wenn nicht, überprüft er das Cookie des Clients Eine solche Sitzung bedeutet, dass die Sitzung tatsächlich nicht vorhanden ist. Wenn eine Sitzung im Cookie vorhanden ist, synchronisieren Sie die Sitzung im Cookie mit Server B, damit die Sitzung synchronisiert werden kann.

Hinweis: Diese Methode ist einfach und bequem zu implementieren und erhöht die Belastung der Datenbank nicht. Wenn der Client jedoch Cookies deaktiviert, wird die Sitzung nicht synchronisiert, was zu Problemen auf der Website führt. Verlust; die Sicherheit von Cookies ist nicht hoch, obwohl sie verschlüsselt wurden, können sie dennoch gefälscht werden.

2. Die Sitzung wird in der Datenbank gespeichert (MySQL usw.)

PHP kann so konfiguriert werden, dass die Sitzung in der Datenbank gespeichert wird mit anderen Datenbanktabellen Wenn MySQL ebenfalls geclustert ist, muss jeder MySQL-Knoten über diese Tabelle verfügen und die Datentabelle dieser Sitzungstabelle muss in Echtzeit synchronisiert werden.

Hinweis: Die Verwendung einer Datenbank zum Synchronisieren von Sitzungen erhöht die E/A der Datenbank und erhöht die Belastung der Datenbank. Darüber hinaus ist die Lese- und Schreibgeschwindigkeit der Datenbank langsam, was einer zeitnahen Synchronisierung von Sitzungen nicht förderlich ist.

3. Die Sitzung wird in Memcache oder Redis gespeichert.

Die Speichermethode ist in der PHP-Konfigurationsdatei auf Memcache eingestellt, sodass PHP selbst einen Sitzungscluster erstellt Speichern Sie die Sitzungsdaten im Memcache.

Hinweis: Die Synchronisierung der Sitzung auf diese Weise erhöht die Belastung der Datenbank nicht und die Sicherheit wird im Vergleich zur Verwendung von Cookies erheblich verbessert. Das Speichern der Sitzung im Speicher erfolgt viel schneller als das Lesen aus der Datei. Allerdings unterteilt Memcache den Speicher in Speicherblöcke mit vielen Spezifikationen, und jeder Block hat seine eigene Größe. Diese Methode bestimmt auch, dass Memcache den Speicher nicht vollständig nutzen kann und zu einer Speicherfragmentierung führt .

4. Die ip_hash-Technologie in nginx kann die Anforderung einer bestimmten IP an dasselbe Backend weiterleiten, sodass ein bestimmter Client und ein bestimmtes Backend unter dieser IP eine stabile Sitzung aufbauen können. ip_hash wird im Upstream definiert Konfiguration:

  1. stream nginx.example.com
  2. { server 192.168.74.235:80;
  3. server 192.168.74.236:80;
  4. ip_hash;
  5. Server 
  6.  { 
  7.  listen 8 0;
  8. Standort /
  9. {
  10. Proxy _pass
  11. http ://nginx.example.com
  12. }
  13. }
  14. ip_hash ist einfach Verständlich, aber weil nur der IP-Faktor zur Zuweisung von Backends verwendet werden kann, ip_hash ist defekt und kann in manchen Situationen nicht verwendet werden: 1.nginx ist nicht der Front-End-Server.
ip_hash erfordert, dass Nginx der Front-End-Server ist. Andernfalls kann Nginx nicht die richtige IP erhalten und kann keinen Hash basierend auf der IP durchführen. Wenn beispielsweise Squid als Frontend verwendet wird, kann Nginx beim Abrufen der IP nur die Server-IP-Adresse von Squid abrufen. Es ist definitiv verwirrend, diese Adresse für die Verteilung zu verwenden.

2. Das Backend von Nginx verfügt auch über andere Methoden zum Lastausgleich.

Wenn im Nginx-Backend ein anderer Lastausgleich stattfindet und die Anfragen auf andere Weise umgeleitet werden, dann wird eine Anfrage eines bestimmten Clients definitiv nicht auf demselben Sitzungsanwendungsserver liegen. Bei dieser Berechnung kann das Nginx-Backend nur direkt auf den Anwendungsserver verweisen oder einen Squid erstellen und dann auf den Anwendungsserver verweisen. Der beste Weg besteht darin, den Standort als Umleitung zu nutzen, einige Anfragen, die eine Sitzung erfordern, über ip_hash umzuleiten und für den Rest zu anderen Backends zu gehen.

5. upstream_hash
Um einige Probleme von ip_hash zu lösen, können Sie das Modul upstream_hash eines Drittanbieters verwenden. Dieses Modul wird in den meisten Fällen als url_hash verwendet, verhindert jedoch nicht die Verwendung für die Sitzungsfreigabe. Ich habe es nicht ausprobiert und verstehe es wirklich nicht

Ergänzung: Eine kurze Einführung in Memcached

1. Konzept

Memcached ist ein von Danga entwickeltes Set. com (das technische Team, das LiveJournal betreibt) Verteiltes Speicherobjekt-Caching-System, das zur Reduzierung der Datenbanklast und zur Verbesserung der Leistung in dynamischen Systemen verwendet wird.

2. Anwendbare Anlässe

1. Da Memcached selbst auf einem verteilten System basiert, eignet es sich besonders für große verteilte Systeme.

2. Datenbank-Frontend-Cache. Datenbanken sind oft der Flaschenhals von Website-Systemen. Große gleichzeitige Zugriffe auf die Datenbank führen häufig zu einem Überlauf des Website-Speichers. Natürlich können wir auch den Caching-Mechanismus von Hibernate nutzen. Memcached basiert jedoch auf der Verteilung und kann unabhängig von der Website-Anwendung selbst sein, sodass es für große Websites besser geeignet ist, Anwendungen aufzuteilen.

3. Datenaustausch zwischen Servern. Beispielsweise teilen wir das Anmeldesystem und das Abfragesystem der Website in zwei Anwendungen auf, platzieren sie auf verschiedenen Servern und gruppieren sie. Wie werden dann die Anmeldeinformationen vom Anmeldesystemserver mit dem Abfragesystem synchronisiert, nachdem sich der Benutzer angemeldet hat? Server? Wolltuch? Zu diesem Zeitpunkt können wir memcached verwenden. Das Anmeldesystem speichert die Anmeldeinformationen zwischen, und das Abfragesystem kann die Anmeldeinformationen abrufen, genau wie beim Abrufen lokaler Informationen.

3. Unzutreffende Anlässe

Für Anwendungen, die keine „Verteilung“ erfordern, keine gemeinsame Nutzung erfordern oder einfach klein genug sind, um nur einen Server zu haben, bringt Memcached keine Vorteile im Gegenteil, es wird die Systemeffizienz verlangsamen, da die Netzwerkverbindung auch Ressourcen erfordert

Lösung: Verwenden Sie Memcached als Sitzungsspeicher und der Memcached-Server ist auf demselben Linux-Host wie Nginx eingestellt.

Lösungsprozess,

Die Host-IPs der beiden Apache sind 192.168.74.235192.168.74.236

Die Nginx-Host-IP ist 192.168.74.131

Memcached Die IP des Hosts lautet 192.168.74.131

Installieren Sie Memcached unter 192.168.74.131 und starten Sie

Nehmen Sie als Beispiel 192.168.74.236, installieren Sie PHP und die PHP-Abhängigkeitsbibliothek auf Memcached yuminstall memcached -devel .i686 libmemcached-devel.i686 php-pecl-memcache.i686

php.ini konfigurieren

session.save_handler= memcache

session.save_path= "tcp: // 192.168.74.131:11211"

Oder (die folgenden beiden wurden nicht ausprobiert)

1. .htaccess in einem bestimmten Verzeichnis:

php_value session.save_handler " memcache“
php_value session.save_path „tcp://IP:11211“

2. In einer bestimmten Anwendung:

ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://IP:11211");

Kommentieren Sie gleichzeitig Folgendes aus:session.save_path= "/var/lib /php/session“

Gleichzeitig öffnen Sie extension=memcache.so

Starten Sie Apache neu und überprüfen Sie die „Registrierten Speicherhandler“ in phpinfo. Diese drei werden „files usermemcache“ sein Wenn dies der Fall ist, beweisen Sie, dass sie installiert sind > # Item_Size Max_age Pages Count Full? Evicted Evict_Time OOM

Fügen Sie die folgende PHP-Datei auf dem 236-Computer hinzu

session_start();

if (!isset($_SESSION['TEST'])) {

$_SESSION['TEST'] = time();

}

$_SESSION ['TEST3'] = time();

print $_SESSION['TEST'];

print "

";

print $_SESSION['TEST3'];

print "

";

print session_id();

?>

Gehen Sie dann zum Memcached-Server und führen Sie

[root@Git ~]# memcached-tool127.0.0.1:11211

# Item_Size Max_age Pages Count Full? Evicted Evict_Time OOM

1 80B 0s 1                                                          0

Dies sollte es Ihnen ermöglichen, die Sitzung auf den zwischengespeicherten Server zu schreiben.

Zusammenfassend:

1. Firewall-Probleme, viele Fehler beim Herstellen einer Verbindung zu LAN-Servern werden durch Firewalls verursacht.

2. Die Abhängigkeiten sind nicht installiert und Memcached schlägt immer zu Beginn fehl, weil ich keine Erweiterungsbibliothek wie PHP installiert habe -memcached

Das Obige stellt vor, wie das Sitzungsfreigabeproblem des Nginx-Lastausgleichs gelöst werden kann, einschließlich des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

MySQL: Die einfache Datenverwaltung für Anfänger MySQL: Die einfache Datenverwaltung für Anfänger Apr 09, 2025 am 12:07 AM

MySQL ist für Anfänger geeignet, da es einfach zu installieren, leistungsfähig und einfach zu verwalten ist. 1. Einfache Installation und Konfiguration, geeignet für eine Vielzahl von Betriebssystemen. 2. Unterstützung grundlegender Vorgänge wie Erstellen von Datenbanken und Tabellen, Einfügen, Abfragen, Aktualisieren und Löschen von Daten. 3. Bereitstellung fortgeschrittener Funktionen wie Join Operations und Unterabfragen. 4. Die Leistung kann durch Indexierung, Abfrageoptimierung und Tabellenpartitionierung verbessert werden. 5. Backup-, Wiederherstellungs- und Sicherheitsmaßnahmen unterstützen, um die Datensicherheit und -konsistenz zu gewährleisten.

Kann ich das Datenbankkennwort in Navicat abrufen? Kann ich das Datenbankkennwort in Navicat abrufen? Apr 08, 2025 pm 09:51 PM

Navicat selbst speichert das Datenbankkennwort nicht und kann das verschlüsselte Passwort nur abrufen. Lösung: 1. Überprüfen Sie den Passwort -Manager. 2. Überprüfen Sie Navicats "Messnot Password" -Funktion; 3.. Setzen Sie das Datenbankkennwort zurück; 4. Kontaktieren Sie den Datenbankadministrator.

So erstellen Sie Navicat Premium So erstellen Sie Navicat Premium Apr 09, 2025 am 07:09 AM

Erstellen Sie eine Datenbank mit Navicat Premium: Stellen Sie eine Verbindung zum Datenbankserver her und geben Sie die Verbindungsparameter ein. Klicken Sie mit der rechten Maustaste auf den Server und wählen Sie Datenbank erstellen. Geben Sie den Namen der neuen Datenbank und den angegebenen Zeichensatz und die angegebene Kollektion ein. Stellen Sie eine Verbindung zur neuen Datenbank her und erstellen Sie die Tabelle im Objektbrowser. Klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie Daten einfügen, um die Daten einzufügen.

MySQL: Einfache Konzepte für einfaches Lernen MySQL: Einfache Konzepte für einfaches Lernen Apr 10, 2025 am 09:29 AM

MySQL ist ein Open Source Relational Database Management System. 1) Datenbank und Tabellen erstellen: Verwenden Sie die Befehle erstellte und creatEtable. 2) Grundlegende Vorgänge: Einfügen, aktualisieren, löschen und auswählen. 3) Fortgeschrittene Operationen: Join-, Unterabfrage- und Transaktionsverarbeitung. 4) Debugging -Fähigkeiten: Syntax, Datentyp und Berechtigungen überprüfen. 5) Optimierungsvorschläge: Verwenden Sie Indizes, vermeiden Sie ausgewählt* und verwenden Sie Transaktionen.

Navicat kann keine Verbindung zu MySQL/Mariadb/PostgreSQL und anderen Datenbanken herstellen Navicat kann keine Verbindung zu MySQL/Mariadb/PostgreSQL und anderen Datenbanken herstellen Apr 08, 2025 pm 11:00 PM

Häufige Gründe, warum Navicat keine Verbindung zur Datenbank und ihren Lösungen herstellen kann: 1. Überprüfen Sie den laufenden Status des Servers. 2. Überprüfen Sie die Verbindungsinformationen; 3. Passen Sie die Firewall -Einstellungen ein; 4. Konfigurieren Sie den Remote -Zugriff; 5. Fehlerbehebung mit Netzwerkproblemen; 6. Berechtigungen überprüfen; 7. Sicherheitskompatibilität sicherstellen; 8. Fehlerbehebung bei anderen Möglichkeiten.

So führen Sie SQL in Navicat aus So führen Sie SQL in Navicat aus Apr 08, 2025 pm 11:42 PM

Schritte zur Durchführung von SQL in Navicat: Verbindung zur Datenbank herstellen. Erstellen Sie ein SQL -Editorfenster. Schreiben Sie SQL -Abfragen oder Skripte. Klicken Sie auf die Schaltfläche Ausführen, um eine Abfrage oder ein Skript auszuführen. Zeigen Sie die Ergebnisse an (wenn die Abfrage ausgeführt wird).

So erstellen Sie eine neue Verbindung zu MySQL in Navicat So erstellen Sie eine neue Verbindung zu MySQL in Navicat Apr 09, 2025 am 07:21 AM

Sie können eine neue MySQL -Verbindung in Navicat erstellen, indem Sie den Schritten folgen: Öffnen Sie die Anwendung und wählen Sie eine neue Verbindung (Strg N). Wählen Sie "MySQL" als Verbindungstyp. Geben Sie die Hostname/IP -Adresse, den Port, den Benutzernamen und das Passwort ein. (Optional) Konfigurieren Sie erweiterte Optionen. Speichern Sie die Verbindung und geben Sie den Verbindungsnamen ein.

Was ist der Unterschied zwischen Syntax zum Hinzufügen von Spalten in verschiedenen Datenbanksystemen Was ist der Unterschied zwischen Syntax zum Hinzufügen von Spalten in verschiedenen Datenbanksystemen Apr 09, 2025 pm 02:15 PM

不同数据库系统添加列的语法为 : MySQL : Alter table table_name add column_name data_type; postgresql : Alter table table_name add column_name data_type; oracle : Alter table table table table_name add add (column_name data_type);

See all articles