Maison > Article > Opération et maintenance > Comment nginx partage la session
Lorsque nginx effectue l'équilibrage de charge, lorsque l'URL de la même IP demande au serveur, l'équilibrage de charge transmettra la demande à différents serveurs pour un traitement en fonction du poids de chaque serveur et d'autres paramètres. Dans ce cas, pour certains avec. Dans le cas de demandes de statut, c'est un gros problème. La session ne peut pas être partagée, alors comment le résoudre
La session existe dans ? la base de données mysql
La session est enregistrée dans la base de données, qui stocke la table de session et les autres tables de données ensemble. Ensuite, lorsque l'utilisateur se connecte et effectue des opérations, il doit accéder à la base de données. pour vérifier l'état de la session. Cela augmente la pression sur la base de données MySQL si la base de données est également clusterisée, alors chaque nœud du cluster de base de données doit sauvegarder la table de session, et les données de la table de session de la base de données ; dans chaque nœud du cluster doit être cohérent. La synchronisation en temps réel
Explication : La session est conservée dans la base de données, ce qui augmente les E/S de la base de données, augmente la pression et la charge sur la base de données. , affectant ainsi les performances de lecture et d'écriture de la base de données, et n'est pas propice à la synchronisation en temps réel de la session
la session est stockée dans le cache memcache ou redis
memcache peut être distribué et la méthode de stockage est définie sur memcache dans le fichier de configuration php, de sorte que php le créera lui-même. Un cluster de session stocke les données de session dans memcache.Explication : Cette façon de synchroniser les sessions n'augmentera pas la charge sur la base de données, et la sécurité est grandement améliorée par rapport à l'utilisation de cookies pour enregistrer les sessions. La lecture à partir d'un fichier est beaucoup plus rapide. Cependant, Memcache divise la mémoire en blocs de stockage de différentes spécifications, et chaque bloc a sa propre taille. Cette méthode détermine également que Memcache ne peut pas utiliser pleinement la mémoire et produira une fragmentation de la mémoire. S'il n'y a pas suffisamment de blocs de stockage, un débordement de mémoire se produira. .
La technologie ip_hash
peut être configurée dans nginx lorsqu'un client sous une certaine IP demande une valeur spécifiée (fixe, car une valeur de hachage est calculée en fonction de l'adresse IP. , en fonction de la valeur de hachage, pour déterminer quel serveur lui est attribué, de sorte que chaque requête IP soit attribuée au serveur spécifié), afin que l'intégrité de l'état de la requête avec état puisse être garantie et qu'aucune perte d'état ne se produise. Ce qui suit est la configuration de nginx, vous pouvez vous référer à :upstream nginx.example.com { server 192.168.1.2:80; server 192.168.1.3:80; ip_hash; } server { listen 80; location / { proxy_pass http://nginx.example.com; } }
Remarque : ip_hash Cette solution peut en effet assurer l'intégrité des requêtes avec statut, mais elle a un gros défaut, c'est-à-dire le La solution ip_hash doit s'assurer que Nginx est le serveur frontal (accepte la vraie IP). Si nginx n'est pas le serveur frontal et qu'il existe un middleware (serveur intermédiaire ou autre), alors l'adresse IP obtenue par nginx n'est pas la vraie IP. adresse, alors cet ip_hash est Cela n'a aucun sens
Pour plus d'articles techniques liés à Nginx, veuillez visiter la colonneTutoriel Nginx pour apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!