【问题标题】:HAProxy + Websockets + Application PersistenceHAProxy + Websockets + 应用程序持久性
【发布时间】:2014-09-16 01:28:47
【问题描述】:

我有一个场景,需要将来自单个浏览器的所有 websocket 请求路由到同一个应用程序服务器。目前我正在为 LB 使用 HAProxy。我注意到它对于“普通”HTTP 请求非常有效,但是当我尝试 WebSocket 请求时,粘性 cookie 不会插入到响应中。我还没有深入研究 HAProxy 的源代码,但似乎正在发生的事情是 HAProxy 没有为 101 交换协议响应注入 cookie?这只是猜测。

这是我的设置: 浏览器 Stunnel HAProxy 2 个 Node.js 服务器

我的 HAProxy 配置:

global
  log 127.0.0.1   local0 debug
  maxconn 4096
  #debug
  #quiet
  user haproxy
  group haproxy

defaults
  log     global
  mode    http
  retries 3
  timeout client 50s
  timeout connect 5s
  timeout server 50s
  option dontlognull
  option httplog
  option redispatch
  option logasap
  option http-server-close
  balance  roundrobin

# Set up application listeners here.

listen admin
  bind 0.0.0.0:22002
  mode http
  stats uri /

frontend http
  maxconn 2000
  bind 0.0.0.0:8080
  default_backend servers-http
  capture cookie SSNID len 63


backend servers-http
   cookie SSNID insert nocache
   server 03PM1 127.0.0.1:8081 cookie 03PM1 check
   server 03PM2 127.0.0.1:8082 cookie 03PM2 check

注意,我试过 1.5 看看是不是 1.4,但没有骰子。我还消除了前面的通道,看看是否可能与 SSL 有关。现在是时候深入研究源代码了...

谢谢。

编辑: 我做了一些挖掘,发现 HAProxy 源中有一行代码可以防止将持久性 cookie 注入到 HTTP 响应中,以获取 HTTP 状态代码小于 200 的响应。这是 WebSockets 的问题,因为典型的服务器响应在HTTP 握手是“101 交换协议”。我在这里向 HAProxy 论坛发布了一些问题:http://marc.info/?l=haproxy&m=140853225609985&w=2

鉴于 HTTP RFC 表明 1xx 响应标头字段是可选的,我不认为这真的是一个错误。但我确实认为鉴于 WebSockets 最近的流行,可能需要进行更新。根据论坛的回复,如果他们给了我绿灯,我将提交我对项目的更改,届时我将更新这篇文章。

更新: 我向 HAProxy 1.6 master 提交了一些更改,它们应该很快就会被拉入。项目的所有者 (Willy) 对我的原始更改添加了一些更改,我已经在我的环境中对其进行了测试。如果对 1.6 的更改被证明是有价值的并且没有任何问题,我的理解是它们将被撤回到版本 1.5 甚至可能是 1.4。您可以在此处查看电子邮件交换:http://marc.info/?l=haproxy&m=141080115708515&w=2

【问题讨论】:

    标签: websocket haproxy


    【解决方案1】:

    如果您查看上面的 cmets,您会发现问题出在 HAProxy 代码本身。它跳过了低于 200 的状态码的标头修饰。这不适用于 WebSockets,因为它们在握手中使用 101。 HAProxy 1.6 版应该很快就会有变化(截至 2015 年 9 月 15 日)。

    我回答了这个问题,而不是依赖上面的编辑,因为可能不清楚是否有答案,我不希望有人认为这方面没有任何活动并浪费大量时间。

    【讨论】:

      猜你喜欢
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 2020-03-18
      • 1970-01-01
      相关资源
      最近更新 更多