Home  >  Article  >  Operation and Maintenance  >  What are the ways Nginx implements session persistence?

What are the ways Nginx implements session persistence?

王林
王林forward
2023-05-29 23:15:495256browse

1. Session persistence based on ip_hash

When doing Nginx load balancing, you can set ip_hash in upstream. Each request is allocated according to the hash result of the accessed IP and mapped to a fixed server. , when the back-end server goes down, the session will be lost. When a request is made again, another normal server will be re-fixed and the session will be maintained. One problem is that since the same IP client accesses a fixed backend server, it may cause load imbalance. The following is the session persistence format of ip_hash.

This assumes that the backend servers are all running normally

在Nginx代理服务器(负载均衡服务器)中配置:===========================================upstream test {   ip_hash;      server 10.20.151.112:80;      server 10.20.151.113:80;}

What are the ways Nginx implements session persistence?

If you are curious about why this result is returned, you can go to my Nginx load Check the detailed configuration and operation in the balanced implementation blog. Therefore, it is not difficult to see that when I use ip_hash, session persistence is achieved, that is, the client will have fixed access to the back-end server 112 (unless this server is down), and it will not return to other back-end servers even if the page is refreshed again. The content (note: in actual production, the content returned by the backend server to the requesting client is the same, this is just for testing effect).

Assume that the server with fixed access is down

What are the ways Nginx implements session persistence?

2. Cookie-based session retention

This method That is to store the user's session in a cookie. When the user is assigned to a different server, first determine whether the user's session exists on the server. If not, first store the session in the cookie into the server to achieve session retention. There are security risks in storing cookies. Hackers may steal cookies and obtain related information. To achieve session persistence in this way, you need to add the sticky_cookie_insert module. The difference from ip_hash is that it does not judge the client based on IP, but based on cookies.

Add sticky module (I installed Nginx using yum method)

yum install -y pcre* openssl* gcc gcc-c++ make   --安装编译环境
wget  https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip   --下载sticky模块
nginx -v  --查看Nginx版本,因为要下载和yum安装nginx对应版本的源码包
wget  http://nginx.org/download/nginx-1.18.0.tar.gz
yum install -y unzip   --安装解压工具
unzip 08a395c66e42.zip --解压模块包
mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ nginx-sticky-module-ng/  --改名
tar xzvf nginx-1.18.0.tar.gz -C /usr/local/  --解压nginx的源码包
cd /usr/local/nginx-1.18.0/
nginx -V   --查看yum安装nginx所有模块
======================================================================================
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/root/nginx-sticky-module-ng
======================================================================================
make && make install
Nginx -V  --再次查看Nginx模块,添加成功

What are the ways Nginx implements session persistence?

Configure on the proxy server (load balancing server)

vim upstream.conf   --在子配置文件conf.d中创建upstream.conf
=====================================================================================
upstream qfedu {
        server 192.168.198.143;
        server 192.168.198.145;
        sticky;
}
vim proxy.conf     ----在子配置文件conf.d中创建proxy.conf
=====================================================================================
server {
    listen       80;
    server_name  localhost;
    
    location / {
        proxy_pass http://testweb;
    }
}
nginx -t    --检查配置文件语法是否有错
nginx -s reload   --重新加载配置文件

Visit http://10.20.151.240/

What are the ways Nginx implements session persistence?

The above is the detailed content of What are the ways Nginx implements session persistence?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete