Nginx的ip hash只取ip地址的前三段进行hash:
for (i = 0; i < 3; i++) {
hash = (hash * 113 + iphp->addr[i]) % 6271;
}
p = hash % iphp->rrp.peers->number;
那么这三段是怎么知道是前三段呢:
sin = (struct sockaddr_in *) r->connection->sockaddr;
p = (u_char *) &sin->sin_addr.s_addr;
iphp->addr[0] = p[0];
iphp->addr[1] = p[1];
iphp->addr[2] = p[2];
有个概念叫网络字节序,主机字节序。
主机字节序与cpu和os有关。有大端法和小端法之分http://blog.csdn.net/sunboy_2050/article/details/6061528
网络字节序是大端输出。
我在nginx源码里加了段log,iphp->addr[0]输出结果为172,我是使用的ip是172.xx.xx.xxx。另外有三个同事分别访问了一下,只有最后一位不同,结果都hash到了一台机器上。
还有同事做了个试验,把一个B类网段的最后一段从1试验到255,最终都hash到了一台backend上。
nginx的ip hash不是一致性hash。
分享到:
相关推荐
根据nginx源码进行ip_hash四段计算,实现负载均衡
python脚本 从nginx的访问log,获取访问IP,记录到redis,根据IP访问数量判断是否存在安全问题,记录不正常IP,(写入到防火墙过滤-待完成)
Nginx如何配置url_hash转发方式.docx
nginx负载均衡中RR和ip_hash策略分析
nginx 限制ip、并发量、连接数等配置
url_hash 是nginx的第三方模块,nginx本身不支持,需要打patch . Url_hash 你nginx在做负载均衡的时候。把转发的URL 以hash的形式保存。这样可以保证同一个URL始终 分给同一个real server,来提高访问速度。
NGINX第三方模块:nginx_upstream_hash-0.3.1.tar.gz。
Nginx upstream urlhash url hash 反向代理 Nginx upstream urlhash url hash 反向代理
对于nginx做ip限制一些总结。
NGINX第三方模块:nginx_upstream_hash-0.3.2,0.3.2版本。
网上查了一下nginx日志记录post请求的内容的方法,主要都是通过LUA实现的,我不知道什么是LUA,因此仅用proxy_pass指令实现保存post请求的内容
CentOS7.3下Nginx基于IP+端口的虚拟主机配置实战,有需要的可以看一下
nginx负载均衡后如何记录来访者IP访客IP浏览者的IP
Nginx: PV、UV、独立IP 做网站的都知道,平常经常要查询下网站PV、UV等网站的访问数据,当然如果网站做了CDN的话,nginx本地的日志就没什么意义了,下面就对nginx网站的日志访问数据做下统计; 概念: UV(Unique ...
nginx的iphash改成按照ip轮询
nginx+lua+redis通过匹配客户端ip进行灰度发布
使用nginx进行服务器管理,经常会遇到跨域问题,此文档就是解决此类问题; nginx跨域问题,解决多端口,多ip问题
IIS7.5下同IP多域名配置SSL, IIS 7.5 以下版本不支持多域名共用443端口 SSL 服务,采用nginx 单独处理来自443端口的请求,从而实现多域名 SSL 附件包含,图文设置nginx, nginx免安装包,可直接使用,已支持SNI(Server ...
IP 部署 说明 192.168.1.91 — 虚IP映射域名 192.168.1.97 keepalived 主要节点 192.168.1.98 keepalived 备份节点 二、keepalived 编译安装 上传keepalived安装包至相应目录,...