Nginx實(shí)現(xiàn)會(huì)話(huà)保持的方式有哪些

一、基于ip_hash的會(huì)話(huà)保持

在做nginx的負(fù)載均衡時(shí),可以在upstream里設(shè)置ip_hash,每個(gè)請(qǐng)求按訪(fǎng)問(wèn)ip的hash結(jié)果分配,映射到固定某一臺(tái)的服務(wù)器,當(dāng)后端服務(wù)器宕機(jī)后,session會(huì)丟失,再次發(fā)起請(qǐng)求時(shí),會(huì)重新固定訪(fǎng)問(wèn)另一臺(tái)正常的服務(wù)器并實(shí)現(xiàn)會(huì)話(huà)保持。一個(gè)問(wèn)題是,由于同一個(gè) ip 客戶(hù)端訪(fǎng)問(wèn)一個(gè)固定的后端服務(wù)器,可能會(huì)導(dǎo)致負(fù)載不均衡。下面是ip_hash的會(huì)話(huà)保持格式。

這里假設(shè)后端服務(wù)器都正常運(yùn)行

nginx代理服務(wù)器(負(fù)載均衡服務(wù)器)中配置:===========================================upstream test {   ip_hash;      server 10.20.151.112:80;      server 10.20.151.113:80;}

Nginx實(shí)現(xiàn)會(huì)話(huà)保持的方式有哪些

如果你對(duì)為什么會(huì)返回這個(gè)結(jié)果感到好奇,可以到我的Nginx負(fù)載均衡實(shí)現(xiàn)博客中查看具體配置和操作。因此不難看出,當(dāng)我使用ip_hash時(shí),實(shí)現(xiàn)了session保持,即客戶(hù)端會(huì)固定訪(fǎng)問(wèn)112這臺(tái)后端服務(wù)器(除非這臺(tái)服務(wù)器宕機(jī)了),就算再次刷新頁(yè)面也不會(huì)返回其他后端服務(wù)器的內(nèi)容(注意:實(shí)際生產(chǎn)中后端服務(wù)器返回給請(qǐng)求客戶(hù)端的內(nèi)容是一樣的,這里僅僅是為了做測(cè)試效果)。

假設(shè)固定訪(fǎng)問(wèn)的那臺(tái)服務(wù)器宕機(jī)了

Nginx實(shí)現(xiàn)會(huì)話(huà)保持的方式有哪些

二、基于cookie的會(huì)話(huà)保持

這種方式就是將 用戶(hù)的session存入cookie里,當(dāng)用戶(hù)分配到不同的服務(wù)器時(shí),先判斷服務(wù)器是否存在該用戶(hù)的session,如果沒(méi)有就先把cookie里面的sessoin存入該服務(wù)器,實(shí)現(xiàn)session會(huì)話(huà)保持。存入cookie存在安全隱患,黑客可能竊取cookie并獲取相關(guān)信息。使用這種方式實(shí)現(xiàn)會(huì)話(huà)保持保持,需要添加sticky_cookie_insert模塊,與ip_hash不同之處在于,它不是基于IP來(lái)判斷客戶(hù)端的,而是基于cookie來(lái)判斷。

添加sticky模塊(我用yum方式安裝的Nginx)

yum?install?-y?pcre*?openssl*?gcc?gcc-c++?make???--安裝編譯環(huán)境 wget??https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip???--下載sticky模塊 nginx?-v??--查看Nginx版本,因?yàn)橐螺d和yum安裝nginx對(duì)應(yīng)版本的源碼包 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模塊,添加成功

Nginx實(shí)現(xiàn)會(huì)話(huà)保持的方式有哪些

在代理服務(wù)器(負(fù)載均衡服務(wù)器)配置

vim?upstream.conf???--在子配置文件conf.d中創(chuàng)建upstream.conf ===================================================================================== upstream?qfedu?{ ????????server?192.168.198.143; ????????server?192.168.198.145; ????????sticky; }
vim?proxy.conf?????----在子配置文件conf.d中創(chuàng)建proxy.conf ===================================================================================== server?{ ????listen???????80; ????server_name??localhost; ???? ????location?/?{ ????????proxy_pass?http://testweb; ????} }
nginx?-t????--檢查配置文件語(yǔ)法是否有錯(cuò) nginx?-s?reload???--重新加載配置文件

訪(fǎng)問(wèn)http://10.20.151.240/

Nginx實(shí)現(xiàn)會(huì)話(huà)保持的方式有哪些

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享