2

我使用 Haproxy 作为 Layer7 http 代理将客户端的请求传输到一台服务器。作为一个长连接,在将每个请求传输到服务器之前,我需要将一些 url 字符串替换为另一个。例如:reqirep ^([^\ ])\ /test/(.) \1\ /serverfault/\2

我跟踪发现HAProxy只会处理每个连接的第一个请求。换句话说,Haproxy 只是将第一个 POST /test/why 替换为 POST /stackoverflow/why。第二个,第三个……没有……

Haproxy 手册中说:“当客户端与服务器通信时,HAProxy 只会分析、记录和处理每个连接的第一个请求。” 因为下一个请求与长连接中的上一个请求有关,所以我想替换字符串并保持连接保持活动状态,让客户端在需要时关闭连接。我试过“选项 httpclose”或“选项 http-server-close”,这对我不起作用。Haproxy 不支持在一个长连接中用 reqirep 替换任何请求吗?是否有任何选择或方法来实现它。

4

1 回答 1

0

Haproxy 还不完全支持 keep alives。计划在 1.5 变得“稳定”时全面实施。话虽如此,我在一个非常大的生产环境中使用 1.5 分支已经快一年了,没有任何问题。

我建议使用 http-server-close ,它只会关闭 haproxy 服务器到后端服务器(这意味着它将允许客户端使用 keep alives 到 haproxy)。这将解决 haproxy 不修改第二、第三等请求的问题。听起来您希望同一个客户端始终访问同一个后端。如果是这种情况,那么您可以考虑使用棍子表或 cookie 亲和性。https://code.google.com/p/haproxy-docs/wiki/cookie

如果您真的需要一直到后端保持活力,您可能不得不考虑使用不同的产品,但根据您的描述,我认为您可以使用持久性来摆脱困境。

于 2013-08-19T15:06:49.627 回答