链接后端以收集 header 信息

Chaining backends to collect header information

是否可以让 HAProxy chain 在响应客户端之前向多个后端发出前端请求?

我想实施:

                +---+    1     +---------+
                |   +---------->         |
                | H |          |  Auth   |
                | A <--headers-+         |
 +--------+     | P |    2     +---------+
 | client +-----> r |
 |        <-----| o |          +---------+
 +--------+  4  | x |          |         |
                | y +--headers->   API   |
                |   |    3     |         |
                +---+          +---------+
  1. 客户端的请求被转发到 Auth 服务器后端,在那里进行身份验证
  2. 设置了一些 auth-related 响应 headers
  3. 请求被定向到链中的下一个后端,而不是响应客户端,完成 auth-headers 来自 2.
  4. 调用链中的所有后端后,将响应发送回客户端

如果可能的话,配置会是什么样子?

这不可能。

HAProxy 在请求开始时仅缓冲 header 和请求的一些额外 KB body(如果有的话),并在缓冲完成后立即释放该缓冲区发送到 back-end。除了它专门从请求中提取和保留的内容(如 capture.req.uri),它在返回响应时已经忘记了请求的字节(并释放了缓冲区)。因此,您不能在响应处理期间使用大多数第 7 层请求提取的原因(您必须将值存储在变量中或使用请求 header 捕获,这会为每个 header 分配内存块)。

HAProxy 引入了对称为 Stream Processing Offload Engine 的支持,该支持目前旨在查询外部数据源和设置内部变量(如动态 http-request set-var ... 操作)但似乎不支持发送任何有效载荷(尽管可以使用提取来捕获少量有效载荷)。它使用二进制协议,而不是 HTTP。

Lua 集成还可以嗅探初始缓冲区,将数据发送到外部系统,并对响应做出反应,但就实际发送足够的请求而言,它的功能有限对这个应用有用。