Nginx Sticky工作原理及编译文件修改

#什么是Sticky?# 为了理解Sticky的工作原理,我们可以先考虑一个问题:负载均衡怎么做?

DNS解析,在域名解析时分配给不同的服务器IP;

IP Hash,根据客户端的IP,将请求分配到不同的服务器上;

cookie,服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发行者。

Sticky就是基于cookie的一种负载均衡解决方案,通过cookie实现客户端与后端服务器的会话保持, 在一定条件下可以保证同一个客户端访问的都是同一个后端服务器。请求来了,服务器发个cookie,并说:下次来带上,直接来找我。

为方便叙述,文中的cookie都指sticky使用的cookie。

#Sticky工作原理 Sticky是nginx的一个模块,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上。sticky的处理过程如下(假设cookie名称为route):

1.客户端首次发起请求,请求头未带route的cookie。nginx接收请求,发现请求头没有route,则以轮询方式将请求分配给后端服务器。

2.后端服务器处理完请求,将响应头和内容返回给nginx。

3.nginx生成route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值。

4.客户端接收请求,并创建route的cookie。

5.客户端再次发送请求时,带上route。

6.nginx接收到route,直接转给对应的后端服务器。

--------------------------------------------------------------------------------------------------

(1)ngx_http_sticky_misc.c

解压:

tar -xzvf nginx-sticky-module-1.1.tar.gz

进入nginx-1.9.3目录

编译时出现错误:

cc1: warnings being treated as errors

ngx_http_sticky_module.c: In function ‘ngx_http_get_sticky_peer’:

/ngx_http_sticky_module.c:333: 警告:赋值时将整数赋给指针,未作类型转换

ake[1]: *** [objs/addon/nginx-sticky-module-1.1/ngx_http_sticky_module.o] 错误 1

 

根据资料 把ngx_http_sticky_misc.c 的281行修改如下

原digest->len = ngx_sock_ntop(in,digest

        ->data, len, 1);

改后digest->len = ngx_sock_ntop(in,sizeof(struct sockaddr_in),digest

        ->data, len, 1);

 

(2)ngx_http_sticky_module.c

第6行添加:

#include <nginx.h>

 

第340行左右修改(iphp->rrp.current = iphp->selected_peer;)为:

#if defined(nginx_version) && nginx_version >= 1009000

iphp->rrp.current = peer;

#else

iphp->rrp.current = iphp->selected_peer;

#endif

 

#解压后,直接复制以下的文件到目录/usr/local/nginx-sticky-module-1.1/,将旧的文件覆盖

rm -rf /usr/local/nginx-sticky-module-1.1/ngx_http_sticky_module.c

rm -rf /usr/local/nginx-sticky-module-1.1/ngx_http_sticky_misc.c

#sticky模块 直接用配置好模板

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值