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

我目前正在networking上运行两台后端服务器,并在Windows上使用Nginx进行负载平衡。

目前我负载testing系统,但是我所有的stream量都是针对一台服务器的。 这是因为ip_hashalgorithm对前3个八位字节进行sorting,即111.222.333.XXX

这是一个问题,因为我瞄准服务器的所有stream量都具有相同的基地址(相同的前3个八位字节),因此我的stream量都没有到达其他服务器。 有没有人知道一种方法来修补或更改ip_hashalgorithm来筛选4个八位字节。

谢谢

Nginx开放源码版本支持哈希指令,它可能与商业版本提供的粘性会话机制类似(不完全相同):

通用哈希方法:请求发送到的服务器是由用户定义的密钥确定的,该用户定义的密钥可以是文本,变量或它们的组合。 例如,密钥可以是源IP和端口,或者是URI:

upstream backend { hash $request_uri consistent; server backend1.example.com; server backend2.example.com; } 

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

那么你如何使用哈希方法使用IPv4的4个八位组? 让我们找到如何从嵌入式变量部分获取客户端IP http://nginx.org/en/docs/http/ngx_http_core_module.html#variables

$ remote_addr客户端地址

所以代码如下所示:

 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; }