Home>Article>Operation and Maintenance> How nginx shares session
When nginx does load balancing, when the URL of the same IP requests the server, the load balancing will forward the request to different servers for processing based on the weight of each server and other settings. In this case, for some with In the case of status requests, it is a big problem. The session cannot be shared, so how to solve it?
session exists in the database mysql
Session is saved in the database, which stores the session table and other data tables together. Then when the user logs in and performs any operations, he or she must go to the database to verify the status of the session. This is undoubtedly This increases the pressure on the MySQL database; if the database is also clustered, then each node of the database cluster must save the session table, and the data of the session table of the database in each cluster node must be consistent. Real-time synchronization
Explanation:Session remains in the database, which increases the IO of the database, increases the pressure and burden on the database, thereby affecting the read and write performance of the database, and is not conducive to the mysql cluster. Real-time synchronization of session
session exists in the cache memcache or redis
memcache can be distributed, and the storage method is set to memcache in the php configuration file, so that php will create it by itself A session cluster stores session data in memcache.
Note:This way to synchronize the session will not increase the burden on the database, and the security is greatly improved compared to using cookies to save the session. Putting the session in the memory is more efficient than saving the session from Reading from a file is much faster. However, memcache divides the memory into storage blocks of many specifications, and each block has its own size. This method also determines that memcache cannot fully utilize the memory and will produce memory fragmentation. If there are not enough storage blocks, memory overflow will occur.
ip_hash technology
Can be configured in nginx. When a client under a certain IP requests a specified (fixed, because a hash value is calculated based on the IP address, according to the hash value to determine which server is assigned to it, so that each IP request is assigned to the specified server) server, so that the integrity of the status of the stateful request can be ensured and status loss will not occur. The following is nginx Configuration, you can refer to:
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; } }
Note:ip_hash This solution can indeed ensure the integrity of requests with status, but it has a big flaw, that is, the ip_hash solution must Ensure that Nginx is the front-end server (accepting real IP). If nginx is not the front-end server and there is middleware (intermediate server or something), then the IP address obtained by nginx is not the real IP address, then this ip_hash is It makes no sense
For more Nginx related technical articles, please visit theNginx usage tutorialcolumn to learn!
The above is the detailed content of How nginx shares session. For more information, please follow other related articles on the PHP Chinese website!