您好,登錄后才能下訂單哦!
這篇文章主要講解了“Nginx基于nginx-sticky-module模塊如何進行會話保持”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Nginx基于nginx-sticky-module模塊如何進行會話保持”吧!
sticky模塊與Ip_hash都是與負載均衡算法相關,但又有差別,差別是
ip hash,根據客戶端的IP,將請求分配到不同的服務器上
sticky,根據服務器給客戶端的cookie,客戶端再次請求時會帶上此cookie,nginx會把有此cookie的請求轉發到頒發cookie的服務器上
Sticky是基于cookie的一種負載均衡解決方案,通過分發和識別cookie,使來自同一個客戶端的請求落在同一臺服務器上,默認cookie標識名為route :
客戶端首次發起訪問請求,nginx接收后,發現請求頭沒有cookie,則以輪詢方式將請求分發給后端服務器。
后端服務器處理完請求,將響應數據返回給nginx。
此時nginx生成帶route的cookie,返回給客戶端。route的值與后端服務器對應,可能是明文,也可能是md5、sha1等Hash值。
客戶端接收請求,并保存帶route的cookie。
當客戶端下一次發送請求時,會帶上route,nginx根據接收到的cookie中的route值,轉發給對應的后端服務器。
官方地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src 下載地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz
同一客戶端,如果啟動時同時發起多個請求,有可能落在不同的后端服務器上。
由于cookie最初由服務器端下發,如果客戶端禁用cookie,則cookie不會生效。
客戶端可能不帶cookie,Android客戶端發送請求時,一般不會帶上所有的cookie,需要明確指定哪些cookie會帶上。如果希望用sticky做負載均衡,請對Android開發說加上cookie。
cookie名稱不要和業務使用的cookie重名。Sticky默認的cookie名稱是route,可以改成任何值
客戶端發的第一個請求是不帶cookie的。服務器下發的cookie,在客戶端下一次請求時才能生效。
Nginx sticky模塊不能與ip_hash同時使用
如果你還沒有部署Nginx,那么就在部署Nginx的時候進行 --add-module 添加上此模塊就行了,我這里是Nginx已經安裝過了,需要再把此模塊加載進NGINX
1.下載sticky
wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz tar xf master.tar.gz #把此模塊放進nginx/module目錄下,名稱太長,重命名一下 mkdir /usr/local/nginx/module mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42 /usr/local/nginx/module/nginx-sticky-module
2.重新編譯NGINX 下載一個NGINX后重新解壓,然后看之前NGINX編譯了那些模塊,這里都給加上,在最后加上 --add-module載入sticky模塊
tar xf nginx-1.16.1.tar.gz cd nginx-1.16.1 ./configure --prefix=/usr/local/nginx \ --sbin-path=/usr/local/nginx/sbin/nginx \ --conf-path=/usr/local/nginx/conf/nginx.conf \ --pid-path=/usr/local/nginx/run/nginx.pid \ --error-log-path=/usr/local/nginx/logs/error.log \ --http-log-path=/usr/local/nginx/logs/access.log \ --with-pcre \ --user=nginx \ --group=nginx \ --with-stream \ --with-threads \ --with-file-aio \ --with-http_v2_module \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --add-module=/usr/local/nginx/module/nginx-sticky-module #在此載入sticky模塊 #./configure完后進行編譯,然后更換 nginx 程序 make mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old cp -rf objs/nginx /usr/local/nginx/sbin/ #最后再 make upgrade 進行更新檢測 [root@nginx_proxy02 nginx-1.16.1]# make upgrade /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful kill -USR2 `cat /usr/local/nginx/run/nginx.pid` sleep 1 test -f /usr/local/nginx/run/nginx.pid.oldbin kill -QUIT `cat /usr/local/nginx/run/nginx.pid.oldbin`
以上就完成了Nginx載入第三方模塊,使用 nginx -V 來查看是否載入成功
3.修改NGINX配置文件 修改NGINX配置文件來啟用sticky
upstream backend { sticky name=ngx_cookie expires=6h; server 192.168.31.240:8080 weight=3 max_fails=3 fail_timeout=10s; server 192.168.31.241:8080 weight=3 max_fails=3 fail_timeout=10s; server 192.168.31.242:8080 weight=6 max_fails=3 fail_timeout=10s; server 192.168.31.243:8080; server 192.168.31.244:8080 down; }
mkdir /usr/local/nginx/ngx_cookie
4.sticky語法解析
指令 | 描述 |
---|---|
name | 設置記錄cookie的名稱(可自定義),默認為route |
domain | 設置cookie要使用的域名 |
path | 設置cookie作用的URL路徑,默認根目錄 |
expires | 設置cookie的生存期 |
hash | 值為 index、md5、sha1,對應明文、md5、和sha1,默認md5,測試sha1后端服務器會變 |
no_fallback | 當sticky的后端機器掛了以后,nginx返回502,而不轉發到其他服務器,不建議設置 |
secure | 設置啟用安全的cookie,需要HTTPS支持 |
httponly | 允許cookie不通過JS泄漏 |
**5.重啟NGINX **
/usr/local/nginx/sbin/nginx -s reload
第一次訪問的時候是沒有Cookie的,訪問完成后NGINX才會把Cookie包含在返回的數據中,在下次請求數據的時候就會出現Cookie。 所以刷新一下后才能看到Cookie。
感謝各位的閱讀,以上就是“Nginx基于nginx-sticky-module模塊如何進行會話保持”的內容了,經過本文的學習后,相信大家對Nginx基于nginx-sticky-module模塊如何進行會話保持這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。