Ssl 定义自定义负载平衡算法

Ssl 定义自定义负载平衡算法,ssl,https,load-balancing,reverse-proxy,haproxy,Ssl,Https,Load Balancing,Reverse Proxy,Haproxy,情况如下: 我有很多网络服务器,比如说10台。我需要使用(软件)负载平衡器,它可以使用反向代理服务器(如HAProxy或Varnish)实现。现在,我们提供的所有流量都是通过https而不是http,所以Varnish是不可能的 现在,我想将用户的请求分为几个类别,这取决于请求的一个输入(POST)参数。根据该参数,我需要在服务器之间划分请求,因为基于此(即使所有其他输入(POST)参数相同),不同的服务器将提供不同的服务 因此,我需要定义一个定制的负载平衡算法,这样,对于该参数的特定值,我将负

情况如下:

我有很多网络服务器,比如说10台。我需要使用(软件)负载平衡器,它可以使用反向代理服务器(如HAProxy或Varnish)实现。现在,我们提供的所有流量都是通过https而不是http,所以Varnish是不可能的

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

因此,我需要定义一个定制的负载平衡算法,这样,对于该参数的特定值,我将负载划分为特定的3(比如说),对于其他值,将请求划分为特定的2,对于其他值,将请求划分为剩余的5

由于我不能使用varnish,因为它不能用于终止ssl(在VCL中定义自定义算法很容易),所以我考虑使用HA代理

因此,问题是:

有谁能帮助我如何使用HA代理定义自定义负载平衡功能

我已经研究了很多,但我找不到任何这样的文件,我们可以使用。因此,如果无法使用HA代理,您可以让我参考其他一些反向代理服务,它们也可以用作负载平衡器,从而满足上述两个标准吗?(ssl终止和定义自定义负载平衡的能力)

编辑:


这个问题与我前面的一个问题是一致的

我不确定您的目标是什么,但我建议根本不要基于HTTP请求体进行自定义路由。这将表现得非常糟糕,并且可能超过您试图实现的任何好处

任何必须在负载平衡器上解析超出典型HTTP头的值的操作都会降低速度。如果你能避免,饼干本身通常是个坏主意

如果您可以控制路径/路由值,那么这可能比解析每个帖子中的特定值要好得多


通过使用lua脚本,您可能可以通过NGINX实现您想要的功能(Kong平台就是基于这些脚本的),但我不能说这对您来说有多困难

下面是一篇文章,其中有一个基于lua输入设置不同上游的具体示例


将→ 代理协议→ “清漆4.1是你的选择吗?”CarlosAbalde,我看到了。这不是我要找的。请参阅链接:。这也是我问的一个问题…这是相关的。HAProxy 1.6-
req.body_param
+ACL定义到后端的路由-Hi@Tracker…感谢您的回复。我想为UEx测试一些东西。因此,我希望基于单个参数为不同的用户提供不同的“相同”请求。(就像服务器级的A-B测试)除了post之外,您还可以使用其他参数吗?您不能根据A/B参数更改路径吗?还是基于IP和useragent的复合哈希?cookie?IP和用户代理不起作用…事实上,我的A/B参数(特别是)是POST参数本身,我不太确定我们是否将该数据存储在cookie中(在会话中),如果不存储,更改代码库的这一部分也会让人头疼。假设您发布的是url表单编码?就像我说的,你可以用nginx/lua来做。。。但这不是你提到的代理之一。还有。。。其中有一些关于读取数据和调整url的示例。。不确定是否根据输入/变量更改/使用lua中的proxypass指令。。。
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
  }
}