1. 程式人生 > >推薦:使用nginx sticky實現基於cookie的負載均衡

推薦:使用nginx sticky實現基於cookie的負載均衡

在多臺後臺伺服器的環境下,我們為了確保一個客戶只和一臺伺服器通訊,我們勢必使用長連線。使用什麼方式來實現這種連線呢,常見的有使用nginx自帶的ip_hash來做,我想這絕對不是一個好的辦法,如果前端是CDN,或者說一個區域網的客戶同時訪問伺服器,導致出現伺服器分配不均衡,以及不能保證每次訪問都粘滯在同一臺伺服器。如果基於cookie會是一種什麼情形,想想看, 每臺電腦都會有不同的cookie,在保持長連線的同時還保證了伺服器的壓力均衡,nginx sticky值得推薦。

如果瀏覽器不支援cookie,那麼sticky不生效,畢竟整個模組是給予cookie實現的.

nginx sticky 模組工作流程圖

ip_hash

nginx sticky

下載安裝nginx sticky

下載地址:http://code.google.com/p/nginx-sticky-module/downloads/list
目前共有2個版本,一個是1.0,一個是1.1,1.0已經壽終正寢了.1.1增加了權重的引數.

安裝nginx + sticky模組

123456789# wget http://nginx-sticky-module.googlecode.com/files/nginx-sticky-module-1.1.tar.gz# tar -xzvf nginx-sticky-module-1.1.tar.gz
# wget http://nginx.org/download/nginx-1.0.6.tar.gz# tar -czvf nginx-1.0.6# cd nginx-1.0.6# ./configure --prefix=/usr/local/nginx-1.0.6 --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --add-module=../nginx-sticky-module-1.1# make# make install

配置nginx sticky

nginx 的upstream使用sticky,如下

1 2 3 4 5 upstreamcluster_test{ sticky; server192.168.100.209:80; server192.168.100.225:80; }

配置虛擬主機(以下有配置的可以忽略掉)

1234567891011121314151617server{listen80;server_name     test.ttlsa.com;index index.jsp;access_log/data/logs/nginx/test.ttlsa.com_access.log main;set$proxy_pass cluster_test;location/{proxy_pass http://$proxy_pass;include proxy.conf;add_header Cache-Control no-store;}}

備註:
nginx和apache不同,nginx每次安裝一個新的模組都需要重新編譯一次,編譯完成之後將nginx這一個檔案拷貝到sbin下面即可.我這邊全新安裝一次,因為公司在兩年前就選擇了這個nginx版本,也沒打算去換,所以大家可以把nginx換成自己最合適的一