nginx第三方模組---nginx-sticky-module的使用(基於cookie的會話保持)
阿新 • • 發佈:2018-12-10
目前的專案網站架構中使用了F5和nginx,F5用來做負載均衡,nginx只用作反向代理伺服器。最近應客戶的要求準備去掉F5,使用軟負載。大家都知道nginx抗併發能力強,又可以做負載均衡,而且使用nginx對我們目前的網站架構不會有大的變動,所以首選方案是nginx。但問題來了,nginx在會話保持這方面比較弱,用ip_hash做會話保持有很大的缺陷,它是通過客戶端ip來實現,根據訪問ip的hash結果分配請求到後端的app伺服器,負載不會很均勻。之前在一個小專案前中使用過這種方法,已經得到驗證。還有一個重要原因是我們的nginx不在最前端,所以只能放棄使用ip_hash。上網搜尋了一番,知道了nginx-sticky-module這個第三方模組可以基於cookie實現會話保持,決定試試。
一、平滑升級nginx,安裝nginx-sticky-module
模組下載地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz
# tar zxf nginx-goodies-nginx-sticky-module-ng-1e96371de59f.tar.gz # mv nginx-goodies-nginx-sticky-module-ng-1e96371de59f nginx-sticky # tar zxf nginx-1.6.1.tar.gz # cd nginx-1.6.1 # ./configure --prefix=/app/nginx --with-http_gzip_static_module --with-http_flv_module --with-http_dav_module --with-http_stub_status_module --with-http_realip_module --add-module=/app/soft/nginx-sticky/ # make # cd /app/nginx/sbin # mv nginx nginx.old # cp /app/soft/nginx-1.6.1/objs/nginx ./ # cd - # make upgrade
二、生產伺服器nginx關鍵配置如下:
upstream my_upstream{ sticky; server 10.20.35.11:8001; server 10.20.35.11:8002; server 10.20.35.11:8003; server 10.20.35.11:8004; server 10.20.35.11:8005; .... } server { listen 80; server_name localhost; ..... location ~/xxxxx/.*\.jsp|do|htm$ { proxy_pass http://my_upstream; ..... } }
一、平滑升級nginx,安裝nginx-sticky-module
模組下載地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz
# tar zxf nginx-goodies-nginx-sticky-module-ng-1e96371de59f.tar.gz # mv nginx-goodies-nginx-sticky-module-ng-1e96371de59f nginx-sticky # tar zxf nginx-1.6.1.tar.gz # cd nginx-1.6.1 # ./configure --prefix=/app/nginx --with-http_gzip_static_module --with-http_flv_module --with-http_dav_module --with-http_stub_status_module --with-http_realip_module --add-module=/app/soft/nginx-sticky/ # make # cd /app/nginx/sbin # mv nginx nginx.old # cp /app/soft/nginx-1.6.1/objs/nginx ./ # cd - # make upgrade
二、生產伺服器nginx關鍵配置如下:
upstream my_upstream{ sticky; server 10.20.35.11:8001; server 10.20.35.11:8002; server 10.20.35.11:8003; server 10.20.35.11:8004; server 10.20.35.11:8005; .... } server { listen 80; server_name localhost; ..... location ~/xxxxx/.*\.jsp|do|htm$ { proxy_pass http://my_upstream; ..... } }