在响应客户端之前,是否可以让HAProxy chain
成为多个后端的前端请求?
我想实施:
+---+ 1 +---------+
| +----------> |
| H | | Auth |
| A <--headers-+ |
+--------+ | P | 2 +---------+
| client +-----> r |
| <-----| o | +---------+
+--------+ 4 | x | | |
| y +--headers-> API |
| | 3 | |
+---+ +---------+
2.
如果可以,配置会是什么样的?
答案 0 :(得分:2)
这是不可能的。
HAProxy仅在请求开始时缓冲标头和一些额外的KB请求体(如果有的话),并在它被发送到后端后立即释放该缓冲区。除了它专门从请求中提取和保留的内容(如capture.req.uri
)之外,它在返回响应时忘记了请求的字节(并释放了缓冲区)。因此,您无法在响应处理期间使用大多数第7层请求提取的原因(您必须在变量中存储值或使用请求标头捕获,这为每个标头分配内存块)。
HAProxy已经引入了对Stream Processing Offload Engine的支持,目前主要用于查询外部数据源和设置内部变量(如动态http-request set-var ...
操作),但似乎不支持发送任何有效载荷(尽管可能使用提取来捕获少量有效载荷)。它使用二进制协议,而不是HTTP。
Lua集成还可以嗅探初始缓冲区,将数据发送到外部系统,并对响应做出反应,但只要实际发送足够的请求对此应用程序有用,它就能做些什么。