1、简介
Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route
客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
后端服务器处理完请求,将响应数据返回给nginx。
此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
客户端接收请求,并保存带route的cookie。
当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。
2、编译
tar xf nginx-sticky-module-1.1.tar.gz
&& tar zxvf nginx-1.10.1.tar.gz
&& cd nginx-1.10.1
&& ./configure --prefix=/usr/local/nginx --add-module=../nginx-sticky-module-1.1
&& make
&& make install
3、配置
upstream cluster{
server 1.1.1.1:8080;
server 1.1.1.2:8080;
sticky expires=1h domain=web.com path=/;
}
server {
listen 80;
server_name test.web.com;
index index.jsp;
access_log logs/test.web.com_access.log main;
set $proxy_pass cluster_test;
location / {
proxy_pass https://$proxy_pass;
include proxy.conf;
add_header Cache-Control no-store;
}
}
4、备注
同一客户端的请求,有可能落在不同的后端服务器上
如果客户端启动时同时发起多个请求。由于这些请求都没带cookie,所以服务器会随机选择后端服务器,返回不同的cookie。当这些请求中的最后一个请求返回时,客户端的cookie才会稳定下来,值以最后返回的cookie为准。
cookie不一定生效
由于cookie最初由服务器端下发,如果客户端禁用cookie,则cookie不会生效。
客户端可能不带cookie
Android客户端发送请求时,一般不会带上所有的cookie,需要明确指定哪些cookie会带上。如果希望用sticky做负载均衡,请对Android开发说加上cookie。
cookie名称不要和业务使用的cookie重名。Sticky默认的cookie名称是route,可以改成任何值。
客户端发的第一个请求是不带cookie的。服务器下发的cookie,在客户端下一次请求时才能生效。
Nginx sticky模块不能与ip_hash同时使用
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net