"session" 在 haproxy 中的确切含义是什么?

What's the exact meaning of "session" in haproxy?

当我打开我的http代理服务器的haproxy统计报告页面时,我看到了这样的东西:

Cum. connections:   280073
Cum. sessions   :   3802
Cum. HTTP requests: 24245

我没有在配置中使用 'appsession' 和任何其他与 cookie 相关的命令。那么这里的 'session' 是什么意思?

我猜 haproxy 通过这个顺序识别 http 会话:

  1. 如果配置中存在 cookie 或查询字符串,则使用它。
  2. 使用 SSL/TLS 会话。
  3. 使用ip地址和TCP连接状态。

我说得对吗?

今天早上我也在问自己同样的问题。

通过 http://www.haproxy.org/download/1.5/doc/configuration.txt 搜索,我发现了这个非常简短的定义(隐藏在参数描述中):

A session is a connection that was accepted by the layer 4 rules.

在您的情况下,您显然是在使用 Haproxy 作为 layer7/HTTP 负载均衡器。如果会话是TCP连接,由于客户端/前端Keep-Alive,HTTP请求比会话多是正常的。

那么我猜高连接数表明很多传入连接甚至在被 HTTP 层考虑之前就被拒绝了。例如通过基于 IP 的 ACL。

据我了解,'session' 一词的引入是为了确保不会混淆两个不同的概念:

  • 一个 (TCP) 连接:这是一个离散事件
  • a (TCP) session : 它是一种跟踪各种元数据并有一定持续时间的状态;最重要的是 Haproxy 工作负载(CPU 和内存)应该主要与会话数(到达率和并发数)有关

实际上会话不是在连接之后引入的,而是在连接之前引入的。端到端连接称为 "session"。随着 SSL、代理协议和第 4 层 ACL 的引入,需要将端到端会话切成更小的部分,因此引入了 "connections"。 Zerodeux 完美地解释了您所观察到的内容。