HAProxy 中的条件转发

HAProxy 中的条件转发

我刚刚开始使用HAProxy,出现以下情况:

  1. 我有两个后端服务,我们把它们service A称为service P
  2. 我正在尝试使用类似负载均衡器haproxy
  3. 当一个请求到达时,假设它有token一个 HTTP 标头的一部分,就像X-SOME-TOKEN这样httponly
  4. 我想提取它token,发送给它service A,检索一个ID token,将它附加到一个请求service B,如果返回 HTTP 状态代码 200,则只有成功 HTTP 状态代码 200 并且发送的 JSON 有效负载service B才会发送到客户端,否则,HTTP 状态代码 500 会发送到客户端。

我对部分感到困惑3 and 4。我不确定是否可以使用在负载平衡层完成此操作haproxy。我查看了文档并简要阅读了有关acl。如果可以使用,那么acl可能的方法是什么?

为了添加更多上下文,这是我的配置文件,其中包含我想要进行更改的位置的注释:

global
  log /dev/log daemon
  maxconn 32768
  chroot /var/lib/haproxy
  user haproxy
  group haproxy
  daemon
  stats socket /var/lib/haproxy/stats user haproxy group haproxy mode 0640 level admin

  tune.bufsize 32768
  tune.ssl.default-dh-param 2048
  ssl-default-bind-ciphers ALL:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH

defaults
   log     global
   mode    http
   option  log-health-checks
  option  log-separate-errors
  option  dontlog-normal
  option  dontlognull
  option  httplog
  option  socket-stats
  retries 3
  option  redispatch
  maxconn 10000
  timeout connect     5s
  timeout client     50s
  timeout server    450s

#listen stats
  #bind 0.0.0.0:80
  #bind :::80 v6only
  #stats enable
  #stats uri     /
  #stats refresh 5s
  #rspadd Server:\ haproxy/1.6

frontend testnode
  # I want to define all my urls here for which,
  # the load balancer needs to listen to on port 4200
  bind 127.0.0.1:4200
  mode http
  default_backend testnodebackend

backend testnodebackend
   # this is where I believe I need to add the proper functions
   # based on url endpoint like mydomain.com/endpoint, I want 
   # to decide where service A needs to be called for token exchange
   # this configuration currently points to two instances of the same 
   # server
   balance roundrobin
   option forwardfor
   http-request set-header X-Forwarded-Port %[dst_port]
   option httpchk HEAD / HTTP/1.1\r\nHost:localhost
   server node1 127.0.0.1:4201 check 
   server node2 127.0.0.1:4202 check

编辑

我发现可以HAProxy使用 Lua 作为脚本语言来添加自定义请求处理程序。我已经设置了配置,可以从 HAProxy 运行“hello_world”示例。但是,当它尝试在 Lua 中加载模块(如套接字模块)时,会出现导入错误。一旦我修复了这个问题,我将添加更多关于如何设置这些自定义请求处理程序的内容。

相关内容