我目前在我的网络上运行两个后端服务器,并在 Windows 上使用 Nginx 进行负载平衡。
我目前正在对系统进行负载测试,但是我的所有流量都指向一台服务器。这是因为 ip_hash 算法按前 3 个八位字节(即 111.222.333.XXX)对流量进行排序
这是一个问题,因为我针对服务器的所有流量都具有相同的基地址(相同的前 3 个八位字节),因此我的流量都不会流向另一台服务器。有谁知道修补或更改 ip_hash 算法以过滤 4 个八位字节的方法。
谢谢
最佳答案
Nginx 开源版本支持哈希 可能与商业版本提供的粘性 session 机制类似(但不完全相同)的指令:
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/
那么如何通过散列方法使用来自 IPv4 的 4 个八位字节呢?让我们看看如何从 Embedded Variables 部分获取客户端 IP http://nginx.org/en/docs/http/ngx_http_core_module.html#variables
$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;
}
关于nginx - 将 Nginx 修补到 ip_hash 4 个八位字节而不是 3 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32460363/