Nginx會(huì)話(huà)保持的具體實(shí)現(xiàn)
1. 基于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à)保持。
- 缺點(diǎn)就是由于同一個(gè)IP客戶(hù)端都固定訪(fǎng)問(wèn)一個(gè)后端服務(wù)器,這就可能會(huì)導(dǎo)致負(fù)載不均衡。下面是 ip_hash 的會(huì)話(huà)保持格式。
- ip_hash 源地址哈希算法,將同一客戶(hù)端的請(qǐng)求總是發(fā)往同一個(gè)后端服務(wù)器,除非該服務(wù)器不可用。
- url_hash 目標(biāo)地址哈希算法
#ip_hash語(yǔ)法: upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server backend3.example.com down; }
2. 基于cookie的會(huì)話(huà)保持
- 這種方式就是將用戶(hù)的cookie存入session里,當(dāng)用戶(hù)分配到不同的服務(wù)器時(shí),先判斷服務(wù)器是否存在該用戶(hù)的session,如果沒(méi)有就先把cookie里面的sessoin存入該服務(wù)器,實(shí)現(xiàn)session會(huì)話(huà)保持。
- 缺點(diǎn)是存入cookie有安全隱患,比如黑客可能會(huì)獲取你的cookie從而獲取你相關(guān)信息。
- 使用這種方式實(shí)現(xiàn)會(huì)話(huà)保持保持,需要添加sticky_cookie_insert模塊,與 ip_hash 不同之處在于,它不是基于IP來(lái)判斷客戶(hù)端的,而是基于cookie來(lái)判斷。
//編譯安裝sticky模塊 //給yum安裝的nginx添加模塊(1.24最新的版本重新編譯安裝會(huì)報(bào)錯(cuò),1.18的不會(huì)報(bào)錯(cuò),版本兼容性的問(wèn)題) ? //安裝編譯環(huán)境 [root@nginx-server ~]# yum install -y pcre* openssl* gcc gcc-c++ make [root@nginx-server ~]# wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip //下載sticky模塊 [root@nginx-server ~]# nginx -v nginx version: nginx/1.18.0 [root@nginx-server ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz #下載yum安裝nginx對(duì)應(yīng)版本的源碼包 [root@nginx-server ~]# yum install -y unzip //安裝解壓工具 [root@nginx-server ~]# unzip 08a395c66e42.zip //解壓模塊包 [root@nginx-server ~]# mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ nginx-sticky-module-ng/ [root@nginx-server ~]# tar xzvf nginx-1.18.0.tar.gz -C /usr/local/ //解壓nginx的源碼包 [root@nginx-server ~]# cd /usr/local/nginx-1.18.0/ ? [root@nginx-server nginx-1.18.0]# nginx -V //查看yum安裝nginx所有模塊 [root@nginx-server nginx-1.18.0]# ./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 [root@nginx-server nginx-1.18.0]# make && make install ? //配置基于cookie會(huì)話(huà)保持 [root@nginx-server conf.d]# vim upstream.conf upstream jianglt { server 192.168.221.136; server 192.168.221.138; sticky; } server { listen 80; server_name www.test.com; charset utf-8; #access_log /var/log/nginx/host.access.log main; location / { proxy_pass http://jianglt; } } [root@nginx-server conf.d]# nginx -t [root@nginx-server conf.d]# nginx -s reload ? //或者: upstream jianglt { server 192.168.221.136; server 192.168.221.138; sticky expires=1h domain=testpm.com path=/; }
說(shuō)明:
expires
:設(shè)置瀏覽器中保持cookie的時(shí)間domain
:定義cookie的域path
:為cookie定義路徑
瀏覽器測(cè)試訪(fǎng)問(wèn);記得在windows本地hosts文件中添加解析
瀏覽器具體的體現(xiàn):
1、訪(fǎng)問(wèn)www.test.com,會(huì)隨機(jī)訪(fǎng)問(wèn)到一個(gè)頁(yè)面,可能是136,也可能是138
2、按下F12,打開(kāi)瀏覽器的控制臺(tái)工具,找到請(qǐng)求頭下面的Cookie(例如:Cookie:route=19c3afb04a79d36869450dfe7dca8512),并將Cookie復(fù)制粘貼到記事本中
3、停掉當(dāng)前訪(fǎng)問(wèn)的服務(wù)器,crtl + F5強(qiáng)制刷新,再次查看瀏覽器中請(qǐng)求頭的Cookie,觀(guān)察是否跟前一次的Cookie一樣(如果第一次訪(fǎng)問(wèn)的是136的頁(yè)面,則停掉136,反之,停掉138)
- 注意:使用后端服務(wù)器可以自身通過(guò)相關(guān)機(jī)制保持session同步,如:使用數(shù)據(jù)庫(kù)、redis、memcached 等做session復(fù)制
3. 會(huì)話(huà)保持的作用
會(huì)話(huà)保持在Web應(yīng)用中具有重要的作用,主要體現(xiàn)在以下幾個(gè)方面:
- 用戶(hù)登錄狀態(tài)維護(hù): 通過(guò)會(huì)話(huà)保持,Web應(yīng)用能夠跟蹤用戶(hù)的登錄狀態(tài),確保用戶(hù)在多次請(qǐng)求之間保持登錄狀態(tài)。這對(duì)于需要用戶(hù)身份驗(yàn)證的應(yīng)用來(lái)說(shuō)尤為重要,以便提供個(gè)性化的服務(wù)和訪(fǎng)問(wèn)控制。
- 購(gòu)物車(chē)和交易狀態(tài): 在電子商務(wù)網(wǎng)站中,用戶(hù)可能會(huì)添加商品到購(gòu)物車(chē)并進(jìn)行結(jié)算。通過(guò)會(huì)話(huà)保持,系統(tǒng)可以跟蹤用戶(hù)的購(gòu)物車(chē)狀態(tài),確保用戶(hù)在購(gòu)物過(guò)程中的信息不會(huì)丟失,同時(shí)保護(hù)交易過(guò)程的一致性。
- 個(gè)性化用戶(hù)體驗(yàn): 對(duì)于一些需要根據(jù)用戶(hù)個(gè)性化設(shè)置或歷史記錄提供服務(wù)的應(yīng)用,會(huì)話(huà)保持可以確保用戶(hù)在訪(fǎng)問(wèn)過(guò)程中保持一致的體驗(yàn)。例如,用戶(hù)在一個(gè)新聞應(yīng)用中的閱讀歷史、個(gè)性化推薦等。
- 減少重復(fù)認(rèn)證: 在一些分布式系統(tǒng)中,用戶(hù)可能會(huì)訪(fǎng)問(wèn)多個(gè)服務(wù)。通過(guò)會(huì)話(huà)保持,用戶(hù)只需要在登錄時(shí)進(jìn)行一次身份驗(yàn)證,然后在整個(gè)會(huì)話(huà)期間,其他服務(wù)可以通過(guò)會(huì)話(huà)標(biāo)識(shí)來(lái)確認(rèn)用戶(hù)身份,避免重復(fù)的身份驗(yàn)證過(guò)程。
- 保持用戶(hù)上下文: 有些應(yīng)用需要在用戶(hù)多次請(qǐng)求之間保持特定的上下文信息,例如在多步驟的表單提交中,確保用戶(hù)在不同步驟之間的數(shù)據(jù)保持一致。
- 提高系統(tǒng)性能: 通過(guò)將用戶(hù)請(qǐng)求路由到同一臺(tái)后端服務(wù)器,會(huì)話(huà)保持可以減少后端服務(wù)器之間的數(shù)據(jù)同步和共享的需求,從而提高系統(tǒng)的性能和效率。
到此這篇關(guān)于Nginx會(huì)話(huà)保持的具體實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Nginx會(huì)話(huà)保持內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nginx?80端口配置多個(gè)location無(wú)效訪(fǎng)問(wèn)404問(wèn)題
這篇文章主要介紹了nginx?80端口配置多個(gè)location無(wú)效訪(fǎng)問(wèn)404問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Nginx搭建高效的靜態(tài)圖片服務(wù)器的方法步驟
高效地管理和分發(fā)靜態(tài)資源是至關(guān)重要的,本文主要介紹了Nginx搭建高效的靜態(tài)圖片服務(wù)器的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05Nginx中l(wèi)ocation proxy_pass加與不加/的區(qū)別說(shuō)明
本文總結(jié)了Nginx配置中的location匹配規(guī)則和proxy_pass用法,包括前綴匹配、精確匹配、正則表達(dá)式匹配、通配符匹配以及proxy_pass的配置細(xì)節(jié)2024-12-12如何利用nginx通過(guò)正則攔截指定url請(qǐng)求詳解
這篇文章主要介紹了如何利用nginx通過(guò)正則攔截指定url請(qǐng)求的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用nginx具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05nginx前端部署后,訪(fǎng)問(wèn)不到同一臺(tái)機(jī)器的后端問(wèn)題
這篇文章主要介紹了nginx前端部署后,訪(fǎng)問(wèn)不到同一臺(tái)機(jī)器的后端問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Nginx?禁止直接訪(fǎng)問(wèn)目錄或文件的操作方法
Nginx?默認(rèn)是不允許列出整個(gè)目錄的,那么需要這樣的功能怎么操作呢,下面小編給大家介紹下Nginx?禁止直接訪(fǎng)問(wèn)目錄或文件的方法,需要的朋友可以參考下2022-10-10