真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

增加stickysession模塊支持解決問題答疑

下文給大家?guī)碓黾觭ticky session模塊支持解決問題答疑,希望能夠給大家在實(shí)際運(yùn)用中帶來一定的幫助,負(fù)載均衡涉及的東西比較多,理論也不多,網(wǎng)上有很多書籍,今天我們就用創(chuàng)新互聯(lián)在行業(yè)內(nèi)累計(jì)的經(jīng)驗(yàn)來做一個解答。

創(chuàng)新互聯(lián)公司專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、鹽城網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價格優(yōu)惠性價比高,為鹽城等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

大家的網(wǎng)站都難免會遇到驗(yàn)證碼的議題,前臺后臺的登入,都需要有驗(yàn)證碼來做登入校驗(yàn)。

因?yàn)橛行?yīng)用的驗(yàn)證碼是在系統(tǒng)緩存中產(chǎn)生的,如果你使用的是負(fù)載均衡,那可能就會出現(xiàn)和我一樣的情況:在驗(yàn)證驗(yàn)證碼時,負(fù)載均衡在起著作用,用戶訪問的頁面因在兩臺云服務(wù)器間承接跳轉(zhuǎn)的,會導(dǎo)致用戶一直無法驗(yàn)證成功,所以在負(fù)載均衡上需要做sticky session支持,才能解決此問題。

增加sticky session模塊支持解決問題答疑

所以我就要著手去處理這個問題。

安裝環(huán)境及軟件版本:

操作系統(tǒng)版本:CentOS 7.2 64bit

負(fù)載均衡層:nginx-1.10.1

服務(wù)層:Tomcat 7.0.72

nginx-sticky-module版本:1.1

因?yàn)槲抑霸谪?fù)載均衡層nginx已經(jīng)編譯完成并使用,所以要增加sticky session的話,就需要在Nginx上再安裝支持粘性會話的插件即可

在官網(wǎng)上有看到Nginx plus對于應(yīng)用模塊的支持,但是對于開源免費(fèi)版的nginx貌似卻還沒有,所以我們先去下載第三方支持的插件

1.下載地址:

https://nginx-sticky-module.googlecode.com/files/nginx-sticky-module-1.1.tar.gz

 

發(fā)現(xiàn)在nginx-sticky-module中最新的也是2012年出的nginx-sticky-module-1.1.tar.gz,之后就沒有再出過新版了,所以就選擇最新版本就好了,nginx-sticky-module-1.0.tar.gz好像不在支持使用了,而且1.1版本增加了權(quán)重的參數(shù).

2.把下載好的安裝包放到你想要放置的位置去解壓:

我就把它放在經(jīng)常放置的位置/data0/soft/,然后解壓:

[root@soft]# tar -xf nginx-sticky-module-1.1.tar.gz

在/data0/soft/nginx-sticky-module-1.1里需要做些準(zhǔn)備工作,否則在后續(xù)編譯nginx時會報錯

為了明確了解看到錯誤提示,直接進(jìn)行編譯nginx查看,后續(xù)再處理也可以。所以為了方便了解錯誤,我就直接編譯了。

3.在nginx上安裝sticky模塊

如果你和我一樣之前也安裝過nginx,又不記得曾經(jīng)安裝過哪些模塊,但又不想影響原有的模塊,有個指令可以幫到你。

就是到你現(xiàn)系統(tǒng)在跑的nginx目錄的sbin里用./nginx -V查看曾經(jīng)編譯時所用的歷史指令

[root@~]# /data0/work/nginx/sbin/nginx -V

nginx version: nginx/1.10.1

built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) 

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

configure arguments: 

--prefix=/data0/work/nginx 

--pid-path=/data0/work/nginx/logs/nginx.pid 

--lock-path=/var/lock/nginx.lock 

--user=nginx 

--group=nginx 

--with-http_ssl_module 

--with-http_flv_module 

--with-http_stub_status_module 

--with-http_gzip_static_module 

--http-client-body-temp-path=/var/tmp/nginx/client/ 

--http-proxy-temp-path=/var/tmp/nginx/proxy/ 

--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ 

--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi 

--http-scgi-temp-path=/var/tmp/nginx/scgi 

--with-pcre 

--add-module=/data0/soft/nginx_upstream_check_module-master/

然后到你需要安裝的nginx源碼包當(dāng)中去,編譯語句參照原先的,只要末尾添加sticky session模塊--add-module=/data0/soft/nginx-sticky-module-1.1/即可

[root@~]# cd /data0/work/nginx-1.10.1

[root@nginx-1.10.1 ]# ./configure --prefix=/data0/work/nginx 

--pid-path=/data0/work/nginx/logs/nginx.pid 

--lock-path=/var/lock/nginx.lock 

--user=nginx --group=nginx 

--with-http_ssl_module --with-http_flv_module 

--with-http_stub_status_module 

--with-http_gzip_static_module 

--http-client-body-temp-path=/var/tmp/nginx/client/ 

--http-proxy-temp-path=/var/tmp/nginx/proxy/ 

--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ 

--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi 

--http-scgi-temp-path=/var/tmp/nginx/scgi 

--with-pcre 

--add-module=/data0/soft/nginx_upstream_check_module-master/ 

--add-module=/data0/soft/nginx-sticky-module-1.1/

接著進(jìn)行make編譯

[root@nginx-1.10.1 ]# make && make install  

發(fā)現(xiàn)報錯了:

cc1: all warnings being treated as errors

make[1]: *** [objs/addon/nginx-sticky-module-1.1/ngx_http_sticky_module.o] Error 1

make[1]: Leaving directory `/data0/work/nginx-1.10.1'

make: *** [build] Error 2

處理辦法:

a.根據(jù)資料把ngx_http_sticky_misc.c 的281行修改如下即可解決問題

[root@~ ]vim /data0/soft/nginx-sticky-module-1.1/ngx_http_sticky_misc.c

281         digest->len = ngx_sock_ntop(in, digest->data, len, 1);

原digest->len = ngx_sock_ntop(in,digest

        ->data, len, 1);

改后digest->len = ngx_sock_ntop(in,sizeof(struct sockaddr_in),digest

        ->data, len, 1);

b.還要把ngx_http_sticky_module.c 的322行修改如下可解決問題

[root@~ ]vim /data0/soft/nginx-sticky-module-1.1/ngx_http_sticky_module.c 

332          #if defined(nginx_version) && nginx_version >= 1009000   ---加

333                 iphp->rrp.current = peer;       --加

334          #else              --加

335                 iphp->rrp.current = iphp->selected_peer; --原有內(nèi)容

336          #endif   --加

備注:其實(shí)就是找到iphp->rrp.current = iphp->selected_peer;在其前后添加內(nèi)容

 

接著繼續(xù)進(jìn)行make&& make install編譯即可

[root@nginx-1.10.1 ]# make && make install

 

4.在nginx的配置文檔里配置啟用sticky模塊功能

因?yàn)槲沂窃谠械幕A(chǔ)上進(jìn)行編譯安裝,且沒有更換版本升級,直接安裝,所以原有的nginx.conf配置文件不會被覆蓋,只是nginx的執(zhí)行檔會重新生成一個

那nginx的upstream如何使用sticky呢,很簡單,方法如下:

[root@~]# vim /data0/work/nginx/conf/nginx.conf

找到upstream模塊添加sticky;

 upstream information{

         sticky;  

         server 172.16.22.3:80  max_fails=2 ;

         server 172.16.22.4:80  max_fails=2 ;

         check interval=3000 rise=2 fall=5 timeout=1000 type=http; 

        }

注: sticky; 是針對--sticky模塊的設(shè)定

     check interval=3000 rise=2 fall=5 timeout=1000 type=http; 是針對upstream后臺健康檢查使用,增加模塊是nginx_upstream_check_module-master

    當(dāng)然你還沒有安裝nginx_upstream_check_module-master模塊,可以先注釋掉這個設(shè)定。等到后續(xù)有需求再進(jìn)行開啟。

 

5.nginx sticky其他語法使用說明

sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback];

name: 可以為任何的string字符,默認(rèn)是route

domain:哪些域名下可以使用這個cookie

path:哪些路徑對啟用sticky,例如path/test,那么只有test這個目錄才會使用sticky做負(fù)載均衡

expires:cookie過期時間,默認(rèn)瀏覽器關(guān)閉就過期,也就是會話方式。

no_fallbackup:如果設(shè)置了這個,cookie對應(yīng)的服務(wù)器掛了,那么將會返回502(bad gateway 或者 proxy error),不建議啟用

nginx sticky expires用法:

upstream information {

     sticky expires=1h;

     server 172.16.22.3:80  max_fails=2 ;

     server 172.16.22.4:80  max_fails=2 ;

}

啟用了過期,cookie 1個小時才過期

6.經(jīng)過上述的相關(guān)設(shè)定后,便可查看stitcky session的問題是否成功解決

#注:下列談及的tomcat服務(wù)器是在做了集群(即session共享的前提下)

a.重啟nginx服務(wù)

先測試配置文件是否準(zhǔn)確無誤

[root@~ ]# /data0/work/nginx/sbin/nginx -t

nginx: the configuration file /data0/work/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /data0/work/nginx/conf/nginx.conf test is successful

#如果有問題,請按照它給的提示進(jìn)行查找和修改即可

 

重啟nginx服務(wù) 

[root@~ ]# /data0/work/nginx/sbin/nginx -s reload

b.為了方便查看,我們就在后端的那兩臺tomcat服務(wù)上設(shè)定下

因?yàn)槲液蠖耸莾膳_tomcat服務(wù)器,每臺服務(wù)器的JESSIONED值都有特殊的標(biāo)志。

所以在我的兩臺后端Tomcat服務(wù)器上,我都做了些準(zhǔn)備工作來方便我辨別,并通過瀏覽器訪問負(fù)載均衡層來查看實(shí)際是哪一臺機(jī)器在提供服務(wù)。

請到你的tomcat服務(wù)器上進(jìn)行下列操作:

[root@~ ]# vim  /data0/work/tomcat01/conf/server.xml

找到里面的第103行

 

取消掉注釋,并修改成如下內(nèi)容:

 

 #注:為了好辨別,我就把jvmRoute改成Tomcat01,同樣Tomcat02的服務(wù)器也做同樣的上述操作,不同的是把jvmRoute設(shè)置成Tomcat02

 

在tomcat服務(wù)器的發(fā)布文檔里的編寫放置一個index.jsp頁面,內(nèi)容如下:

[root@~ ]# vim  /data0/work/tomcat01/webapps/ROOT/jsp/index.jsp

<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

tomcat01

 

Session serviced by tomcat

             

<% session.setAttribute("abc","adc");%>

           

   

Session ID <%=session.getId() %>
Created on<%=session.getCreationTime() %>

然而tomcat02服務(wù)器做同樣的動作,只是把index.jsp頁面中tomcat01替換成tomcat02

c.比如172.16.22.3這臺是tomcat01,172.16.22.4這臺是tomcat02.當(dāng)你訪問http://172.16.22.2/index.jsp頁面時,在為開啟sticky session模塊前,不管怎么刷新訪問頁面,JESSIONED值都是不變的,但是承載的tomcat會交替變化.

如下圖所示:

在tomcat01上承接服務(wù):

增加sticky session模塊支持解決問題答疑

刷新頁面后,發(fā)現(xiàn)是tomcat02上承接服務(wù),且session ID不變

增加sticky session模塊支持解決問題答疑

但是如果Nginx配置檔開啟了sticky模塊,我們可以看到JESSIONED值也不會發(fā)生變化.但無論你怎么刷新,它都死死的粘滯在其中一臺tomcat服務(wù)器上.

增加sticky session模塊支持解決問題答疑

看了以上關(guān)于增加sticky session模塊支持解決問題答疑,如果大家還有什么地方需要了解的可以在創(chuàng)新互聯(lián)行業(yè)資訊里查找自己感興趣的或者找我們的專業(yè)技術(shù)工程師解答的,創(chuàng)新互聯(lián)技術(shù)工程師在行業(yè)內(nèi)擁有十幾年的經(jīng)驗(yàn)了。

 


當(dāng)前名稱:增加stickysession模塊支持解決問題答疑
轉(zhuǎn)載源于:http://weahome.cn/article/jcisjo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部