Nginx服务器ip_hash策略

Nginx服务器ip_hash策略

注:本次ip_hash策略验证基于nginx-1.8.0版本
简介:当nginx服务器的upstream轮询策略配置为ip_hash的时候,nginx路由用户请求采用的是通过终端用户的IP地址路由(hash算法)到指定的后端服务器
下面基于一个请求结合nginx源码详细分析一下Nginx的Hash策略

基础介绍:
Nginx服务器:172.30.0.206  
后端服务器: 172.30.0.98:30523  
            172.30.0.98:30059

upstream 轮询策略 ip_hash
本例旨在分析ip_hash策略

  • 在172.30.0.175 服务器上发送一个请求

  • 在这里插入图片描述
    curl -v http://172.30.0.206/TestWebApp/index
    nginx服务器接受到这个请求后通过ngx_http_upstream_ip_hash_module这个模块处理后端服务轮询,源码位置:src/ http/modules/ngx_http_upstream_ip_hash_module.c
    下面是Nginx-1.8.0的源码,我在之上加了些日志
    在这里插入图片描述
    下面是 175服务器请求后nginx服务器日志截图
    在这里插入图片描述

  • hash算法,hash算法如下图

在这里插入图片描述

以上代码可以看出Nginx服务器循环iphp->addrlen次 做hash求值,而iphp-addrlen在Ipv4网络下默认为3,见下图。也就是说 循环三次最终算出一个hash值,每次循环获取一个ip段(iphp->[i]),由此得知如果ip地址固定,初始hash值固定那么最终的hash值也就确定。初始hash值是固定的见下图默认为89. 所以最终的hash值只和ip地址的前三段有关系,也就是说在通网段访问nginx得到的hash值是固定的。严格意义上说应该是ip前三段一样的都会得出同样的hash值。

在这里插入图片描述

  • 获取后端服务器

如下代码分析,如果没有设置权重,那么就会走到if代码段, 通过上面求出的hash值 % 后端server个数得到一个值,这个值就是 upstream中server的索引

在这里插入图片描述

总结:在IPV4 网络下、Nginx版本1.8.0, 轮询策略ip_hash
       1、指定客户端的ip对应的后端服务器是固定的
       2、ip地址前三段一样的客户端请求会路由到同一个后端服务器
       
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值