定义自定义负载平衡算法

vis*_*071 9 ssl https reverse-proxy load-balancing haproxy

情况如下:

我有许多Web服务器,比如10.我需要使用(软件)负载均衡器,它可以使用反向代理服务器实现,如HAProxy或Varnish.现在,我们所服务的所有流量都是通过https而不是http,所以Varnish是不可能的.

现在,我想将用户的请求分成几个类别,这些类别取决于请求的一个输入(POST)参数.根据该参数,我需要在服务器之间划分请求,基于此,(即使所有其他输入(POST)参数相同),不同的服务器将以不同的方式提供服务.

所以,我需要定义一个自定义负载平衡算法,这样,对于该参数的特定值,我将负载除以特定的3(比方说),对于某些其他值,将请求分为特定的2和其他值( s),剩下的5.

由于我不能使用清漆,因为它不能用于终止ssl(定义自定义算法在VCL中很容易),我正在考虑使用HA-Proxy.

所以,这是一个问题:

任何人都可以帮助我如何使用HA-Proxy定义自定义负载平衡功能?

我研究了很多,但我找不到任何这样的文件.因此,如果HA-Proxy不可能,您是否可以将我转介给其他一些反向代理服务,它也可以用作负载均衡器,以满足上述两个标准?(ssl终止和定义自定义负载平衡的能力).

编辑:

这个问题是我之前提出的一个问题.用于https的清漆

Tra*_*er1 5

我不确定您的目标是什么,但我建议根本不要基于 HTTP 请求正文进行自定义路由。这会表现得很差,并且可能超过您想要实现的任何好处。

任何必须在负载均衡器上解析超出典型 HTTP 标头的值的内容都会减慢速度。如果可以避免的话,Cookie 本身通常不是一个好主意。

如果您可以控制路径/路由值,这可能比解析每个 POST 以获得某些值更好。


你也许可以通过 NGINX 使用 lua 脚本实现你想要的(Kong 平台基于它们),但我不能说这对你来说有多难......

https://github.com/openresty/lua-nginx-module#readme

这里有一篇文章,其中有一个根据lua输入设置不同上游的具体示例。

http://soseoff.com/2012/06/11/dynamic-nginx-upstreams-with-lua-and-redis.html

server {
  ...BASE CONFIG HERE...

  port_in_redirect off;

  location /somepath {
    lua_need_request_body on;

    set $upstream "default.server.hostname";

    rewrite_by_lua '
      ngx.req.read_body()  -- explicitly read the req body
      local data = ngx.req.get_body_data()
      if data then
        -- use data: see
        -- https://github.com/openresty/lua-nginx-module#ngxreqget_body_data
        ngx.var.upstream = some_deterministic_value
      end
    '

    ...OTHER PARAMS...
    proxy_pass http://$upstream
  }
}
Run Code Online (Sandbox Code Playgroud)