链接后端以收集标头信息

时间:2018-04-04 21:06:53

标签: haproxy

在响应客户端之前,是否可以让HAProxy chain成为多个后端的前端请求?

我想实施:

                +---+    1     +---------+
                |   +---------->         |
                | H |          |  Auth   |
                | A <--headers-+         |
 +--------+     | P |    2     +---------+
 | client +-----> r |
 |        <-----| o |          +---------+
 +--------+  4  | x |          |         |
                | y +--headers->   API   |
                |   |    3     |         |
                +---+          +---------+
  1. 客户端的请求被转发到经过身份验证的Auth服务器后端
  2. 设置了一些与身份验证相关的响应标头
  3. 而不是回复客户端,而是将请求定向到链中的下一个后端,并使用2.
  4. 中的auth-headers完成
  5. 在调用链中的所有后端之后,响应将被发送回客户端
  6. 如果可以,配置会是什么样的?

1 个答案:

答案 0 :(得分:2)

这是不可能的。

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

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

Lua集成还可以嗅探初始缓冲区,将数据发送到外部系统,并对响应做出反应,但只要实际发送足够的请求对此应用程序有用,它就能做些什么。