N个HTTP请求后,HAProxy关闭前端连接

时间:2018-12-04 18:19:50

标签: haproxy

在尝试将HAProxy用于处理N个请求后,将其配置为关闭客户端TCP连接。我的目标是让长期使用的客户端偶尔重新建立连接,否则这些连接将通过HTTP Keep-Alive保持活动状态。

基本上,我正在尝试实现等效于nginx的keepalive_requests(http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_requests)。

我目前有类似的东西:

frontend https-in
  bind *:443 ssl crt /etc/ssl/private/cert.pem

  stick-table type binary len 32 size 1000 expire 75s store gpc0

  acl close_connection sc0_get_gpc0 gt 3
  acl exceeded_connection sc0_get_gpc0 gt 4

  http-response set-header Connection Keep-Alive unless close_connection
  http-response set-header Keep-Alive timeout=75\ max=3 unless close_connection
  http-response set-header Connection Close if close_connection
  timeout http-keep-alive 75s
  timeout client 75s

  tcp-request content track-sc0 ssl_fc_session_id
  tcp-request content reject if exceeded_connection

  http-request sc-inc-gpc0

  default_backend https

backend https
  option httpchk GET /health

  server localhost 127.0.0.1:8080 maxconn 1000

但是与此相关的一些问题包括:

  • SSL会话ID可以在连接之间重复使用
  • 当客户端超过阈值时(假设他们忽略了Connection: Close),这突然关闭了与客户端的连接

是否有针对此类情况的推荐方法?理想情况下,我想:

  • 根据单个TCP连接(而不是src来跟踪计数器,以避免在同一IP中建立多个连接的情况
  • 在最终响应上关闭连接(同时发送Connection: Close

但是我无法找到实现这两种方法的方法。

谢谢!

修改

通过创建src,src_port,dst,dst_port的元组哈希,我能够设计出更好的方法来跟踪唯一的TCP连接:

  http-request set-header X-Unique-Id %[src]:%[src_port]:%[dst]:%[dst_port]
  http-request set-header X-Unique-Id-SHA %[req.fhdr(X-Unique-Id),sha1]
  http-request track-sc0 req.fhdr(X-Unique-Id-SHA)

我不必为必须创建虚拟头而疯狂,但这似乎行得通。

0 个答案:

没有答案