Spr*_*out 11 ip load-balancing nginx
我目前正在我的网络上运行两个后端服务器,并在Windows上与Nginx进行负载平衡.
我正在加载测试系统,但是我的所有流量都指向一台服务器.这是因为ip_hash算法按前3个八位字节对流量进行排序,即111.222.333.XXX
这是一个问题,因为我瞄准服务器的所有流量都具有相同的基地址(相同的前3个八位字节),因此我的流量都不会转到另一个服务器.有没有人知道修补或更改ip_hash算法以过滤4个八位字节的方法.
谢谢
Ana*_*oly 11
Nginx开源版本支持散列指令,它可能与商业版本提供的粘性会话机制类似地工作(但不完全相同):
通用散列方法:向其发送请求的服务器是从用户定义的密钥确定的,该密钥可以是文本,变量或它们的组合.例如,密钥可以是源IP和端口,或URI:
upstream backend {
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
}
Run Code Online (Sandbox Code Playgroud)
https://www.nginx.com/resources/admin-guide/load-balancer/
那么如何使用hash方法从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;
}
Run Code Online (Sandbox Code Playgroud)
更新:
如果看一下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;
}
Run Code Online (Sandbox Code Playgroud)