使用 HTTP 标头的 Haproxy 负载平衡

Jul*_*oux 8 load-balancing http-headers haproxy socket

我们正在使用 HAProxy 来平衡我们的 websocket 和 Comet 应用程序。后面有一个 HAProxy 和 3 个应用程序在运行。我们使用 HTTP 基本身份验证(将来我们将使用其他类型的身份验证,如 OAuth)来识别连接的用户。

我们不能使用常规循环,因为给定用户的连接最终在同一台服务器上很重要。在哪里并不重要,但重要的是他们使用相同的服务器。

我知道 HAProxy 是一种基于智能 cookie 的方法,但不幸的是,在我们的例子中,有时,同一用户会从不同的机器连接,所以 cookie 不起作用)。

是否可以使用 HTTP Authorization 标头的散列来进行负载平衡?另外,这更复杂,是否可以定义我们自己的散列方法?

后续问题[在威利的回应之后]:

既然可以做balance hdr(Authorization),是否可以在登录字段上做(解析后)?

另外,确切的算法是什么?我相信它的形式是hash(Authorization) % number_of_backend_server,但是,散列函数是什么,更重要的是,它是否可以调整?(或者我可以添加一个偏移量)。

我问是因为这个应用程序实际上是保持 XMPP 组件连接打开,我需要使用相同的算法对 XMPP 组件进行负载平衡toXMPP 节中的jid 由 HTTP 标头授权确定。

Wil*_*eau 10

是的,您可以很好地散列您选择的任何标头。只需使用“平衡 hdr(header_name)”。我必须说我从来没有想过这样做。在某些环境中,它确实非常有用。如果有帮助,您还可以对 URL 参数或 POST 参数进行哈希处理。

但是,您无法定义散列方法。您可以选择散列是基于地图还是一致的,仅此而已。