转自: https://blog.csdn.net/yyysylvia/article/details/80198021
sticky的工作原理
Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route
- 客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
- 后端服务器处理完请求,将响应数据返回给nginx。
- 此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
- 客户端接收请求,并保存带route的cookie。
- 当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。
nginx+sticky安装
nginx安装最好采用编译安装的方式,这样可以很方便的找到nginx的安装位置,方便添加nginx-sticky模块。如果之前已经编译安装过nginx,只是添加sticky模块,则可跳过nginx安装解压等过程,直接进行步骤4
获取linux下的nginx安装包,官网下载 https://nginx.org/en/download.html, 书写本文档时使用的安装包为nginx-1.14.0.tar.gz
获取nginx-sticky模块包,一个比较靠谱的github下载地址 https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/downloads/ , 书写本文档时使用的安装包为
nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip -O ./nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
安装前编译环境准备
- centos:
bash1
yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel --setopt=protected_multilib=false
- ubuntu:
bash1
apt-get install build-essential libtool libpcre3 libpcre3-dev
安装步骤
- 解压nginx和sticky安装包
bash1
2
3
4tar -zxvf nginx-1.14.0.tar.gz
unzip -D nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42 nginx-sticky-module-ng
cd nginx-1.14.0- 输入安装命令并指定安装路径,可以再添加其他需要的属性,但最好不要减少,否则sticky模块添加过程可能出现报错;如果之前已经编译安装过nginx,可以用nginx -V指令查看之前的命令,在之前configure argument的基础上添加下列安装属性
bash1
./configure --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gunzip_module --with-http_gzip_static_module --add-module=${absolutPath}/nginx-sticky-module-ng
${absolutePath}为本机上nginx-sticky-module-ng文件夹所在路径
出现如下提示信息表示没有问题:
执行编译安装(覆盖安装)
bash1
make && make install
安装成功后输入指令查看编译信息:
bash1
/usr/local/nginx/sbin/nginx -V
可以看到上一次编译使用的是我们输入的指令
启动nginx
bash1
/usr/local/nginx/sbin/nginx
之后可以访问80端口在网页上查看效果, 此时sticky模块也一起生效,可以在nginx.conf中使用了
- 将nginx设置为系统服务
bash1
vim /lib/systemd/system/nginx.service
bash1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.targetbash1
2chmod 745 /lib/systemd/system/nginx.service
systemctl enable nginx.service完成后就可以使用以下这些命令了
bash1
2
3
4systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl status nginx
负载均衡配置(需要结合具体项目,仅供参考需要)
/usr/local/nginx/conf/nginx.conf关键配置如下(配置在http块中):
1 | upstream backend { |
sticky其他用法
1 | 格式: sicky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback]; |