Nginx会话保持之nginx

在使用负载均衡的时候会遇到会话保持的问题,常用的方法有:
1.ip hash,根据客户端的IP,将请求分配到不同的服务器上;
2.cookie,服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发布者,
注意:cookie需要浏览器支持,且有时候会泄露数据

1.Sticky工作原理 :

Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route
1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
2.后端服务器处理完请求,将响应数据返回给nginx。
3.此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
4.客户端接收请求,并保存带route的cookie。
5.当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。

2.重新编译nginx增加nginx-sticky-module模块

查询bitbucket.org上的该模块相关文档

https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/overview

# 查询当前的nginx编译参数可以使用以下命令:

[root@nginx ~]# mkdir -p /server/tools [root@nginx ~]# cd /server/tools [root@nginx tools]# /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.8.0 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module

# 下载该模块的软件包()
# 其他平台上的nginx-sticky-module模块包多是国外的资源的不方便下载,找到GITHUB上面的该软件包

[root@nginx tools]# wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip

# 解压

[root@nginx tools]# unzip -D nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip [root@nginx tools]# mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42 nginx-sticky-module-ng

# 备份之前的nginx目录(注意:nginx日志可能很大)

[root@nginx tools]# cp -rf /usr/local/nginx/ /server/backup/

# 进入到之前编译好的nginx目录下,重新进行编译安装

# 注意:是覆盖安装

[root@nginx tools]# cd nginx-1.8.0 [root@nginx nginx-1.8.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/server/tools/nginx-sticky-module-ng [root@nginx nginx-1.8.0]# make [root@nginx nginx-1.8.0]# make install

# 安装完再次查看nginx编译参数

[root@nginx tools]# /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.8.0 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/server/tools/nginx-sticky-module-ng

 

# 需要重新启动nginx才可以使用sticky模块

[root@nginx tools]# service nginx restart

# 编辑配置文件,实例:

upstream www_web_com { # ip_hash; sticky expires=1h domain=web.com path=/; server 10.0.0.16:8080; server 10.0.0.17:8080; }

# 具体的配置根据公司的相关业务配置即可

# 之后打开网站进行测试,使用sticky的情况下,不管怎么刷新都是如下结果

# 不使用Nginx sticky模块时,刷几次就变了(有时候刷一次,有时候多刷几次)

Nginx会话保持之nginx

备注:每台后端真实服务器都会有一个唯一的route值,所以不管你真实服务器前端有几个装了sticky的nginx代理,他都是不会变化的.

3.sticky模块的使用

# 位置:upstream标签内

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/398333b1796f042c9be628aaeb430b60.html