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

标签 nginx ip load-balancing

我目前在我的网络上运行两个后端服务器,并在 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/

相关文章:

ruby-on-rails - 使用 Puma 部署在 Elastic Beanstalk 上的 Rails 应用程序失败 - 每个请求都出现 502 错误

java - Weblogic集群

postgresql - nginx:在 PostgreSQL 中存储 POST 数据

无法通过 dev_queue_xmit() 发送数据包

java - 如何在Android中扫描本地网络中其他设备的MAC地址?

windows - 如何在 Windows 上创建 IP 别名

kubernetes - Kubernetes 服务上的加权路由

c# - 由于循环负载平衡器,用户正在退出网站

post - 上传文件到 Nginx

javascript - joomla 3.2后端javascript错误