我有两台 Varnish 服务器,计划添加更多 Varnish 服务器。我使用 nginx 负载均衡器将流量分配到这些 Varnish 服务器。为了充分利用每台 Varnish 服务器的最大 RAM,我需要相同的请求到达相同的 Varnish 服务器。相同的请求可以通过请求 URL 中的一个 GET 参数(例如“a”)来识别
在正常代码中,我会做类似的事情-(如果我需要在 2 个 Varnish 服务器之间划分所有流量)
if($arg_a % 2 == 0) {
proxy_pass varnish1;
}
if($arg_a % 2 == 1) {
proxy_pass varnish2;
}
这基本上是对 GET 参数 a 进行奇偶校验,然后决定向哪个上游池发送请求。我的问题是-
- 此类代码在 nginx 中的对应代码是什么?我不知道 nginx 是否接受模块化
- nginx (0.8.54) 中是否有更好/更高效的内置哈希函数可供我使用。将来我想添加更多上游池,这样我就不需要将 %2 更改为 %3 %4 等等
- 还有其他方法可以解决这个问题
答案1
获取查询字符串变量(例如 $arg_x)并将其插入http://wiki.nginx.org/HttpUpstreamRequestHashModule