加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

将Nginx修补为ip_hash 4个八位字节而不是3个

发布时间:2020-12-13 21:03:12 所属栏目:Nginx 来源:网络整理
导读:我目前正在我的网络上运行两个后端服务器,并在Windows上与Nginx进行负载平衡. 我正在加载测试系统,但是我的所有流量都是针对一台服务器的.这是因为ip_hash算法按前3个八位字节对流量进行排序,即111.222.333.XXX 这是一个问题,因为我瞄准服务器的所有流量都具

我目前正在我的网络上运行两个后端服务器,并在Windows上与Nginx进行负载平衡.

我正在加载测试系统,但是我的所有流量都是针对一台服务器的.这是因为ip_hash算法按前3个八位字节对流量进行排序,即111.222.333.XXX

这是一个问题,因为我瞄准服务器的所有流量都具有相同的基地址(相同的前3个八位字节),因此我的流量都不会转到另一个服务器.有没有人知道修补或更改ip_hash算法以过滤4个八位字节的方法.

谢谢

最佳答案
Nginx开源版本支持散列指令,该指令可以与商业版提供的粘性会话机制类似地工作(但不完全相同):

The generic hash method: the server to which a request is sent is
determined from a user-defined key which may be a text,variable,or
their combination. For example,the key may be a source IP and port,
or URI:

upstream backend {
    hash $request_uri consistent;

    server backend1.example.com;
    server backend2.example.com;
}

https://www.nginx.com/resources/admin-guide/load-balancer/

那么如何使用hash方法从IPv4中使用4个八位字节?让我们来看看如何从嵌入式变量部分http://nginx.org/en/docs/http/ngx_http_core_module.html#variables获取客户端IP

$remote_addr client address

所以代码看起来像:

upstream backend {
    hash $remote_addr consistent;

    server backend1.example.com;
    server backend2.example.com;
}

更新:

如果看一下Stream模块(TCP代理),第一个例子显示了完全相同的方法:

upstream backend {
    hash $remote_addr consistent;

    server backend1.example.com:12345  weight=5;
    server backend2.example.com:12345;
    server unix:/tmp/backend3;
}

server {
    listen 12346;
    proxy_pass backend;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读