链接后端以收集 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 | |
+---+ +---------+
- 客户端的请求被转发到 Auth 服务器后端,在那里进行身份验证
- 设置了一些 auth-related 响应 headers
- 请求被定向到链中的下一个后端,而不是响应客户端,完成 auth-headers 来自
2.
- 调用链中的所有后端后,将响应发送回客户端
如果可能的话,配置会是什么样子?
这不可能。
HAProxy 在请求开始时仅缓冲 header 和请求的一些额外 KB body(如果有的话),并在缓冲完成后立即释放该缓冲区发送到 back-end。除了它专门从请求中提取和保留的内容(如 capture.req.uri
),它在返回响应时已经忘记了请求的字节(并释放了缓冲区)。因此,您不能在响应处理期间使用大多数第 7 层请求提取的原因(您必须将值存储在变量中或使用请求 header 捕获,这会为每个 header 分配内存块)。
HAProxy 引入了对称为 Stream Processing Offload Engine 的支持,该支持目前旨在查询外部数据源和设置内部变量(如动态 http-request set-var ...
操作)但似乎不支持发送任何有效载荷(尽管可以使用提取来捕获少量有效载荷)。它使用二进制协议,而不是 HTTP。
Lua 集成还可以嗅探初始缓冲区,将数据发送到外部系统,并对响应做出反应,但就实际发送足够的请求而言,它的功能有限对这个应用有用。
是否可以让 HAProxy chain
在响应客户端之前向多个后端发出前端请求?
我想实施:
+---+ 1 +---------+
| +----------> |
| H | | Auth |
| A <--headers-+ |
+--------+ | P | 2 +---------+
| client +-----> r |
| <-----| o | +---------+
+--------+ 4 | x | | |
| y +--headers-> API |
| | 3 | |
+---+ +---------+
- 客户端的请求被转发到 Auth 服务器后端,在那里进行身份验证
- 设置了一些 auth-related 响应 headers
- 请求被定向到链中的下一个后端,而不是响应客户端,完成 auth-headers 来自
2.
- 调用链中的所有后端后,将响应发送回客户端
如果可能的话,配置会是什么样子?
这不可能。
HAProxy 在请求开始时仅缓冲 header 和请求的一些额外 KB body(如果有的话),并在缓冲完成后立即释放该缓冲区发送到 back-end。除了它专门从请求中提取和保留的内容(如 capture.req.uri
),它在返回响应时已经忘记了请求的字节(并释放了缓冲区)。因此,您不能在响应处理期间使用大多数第 7 层请求提取的原因(您必须将值存储在变量中或使用请求 header 捕获,这会为每个 header 分配内存块)。
HAProxy 引入了对称为 Stream Processing Offload Engine 的支持,该支持目前旨在查询外部数据源和设置内部变量(如动态 http-request set-var ...
操作)但似乎不支持发送任何有效载荷(尽管可以使用提取来捕获少量有效载荷)。它使用二进制协议,而不是 HTTP。
Lua 集成还可以嗅探初始缓冲区,将数据发送到外部系统,并对响应做出反应,但就实际发送足够的请求而言,它的功能有限对这个应用有用。