我正在读HAProxy 手册其中有一部分我不太理解:
request-learn
If this option is specified, then haproxy will be able to learn
the cookie found in the request in case the server does not
specify any in response. This is typically what happens with
PHPSESSID cookies, or when haproxy's session expires before
the application's session and the correct server is selected.
It is recommended to specify this option to improve reliability.
“如果服务器没有指定任何响应”是什么意思,具体来说,服务器响应什么,如果服务器没有指定 cookie,那么学习 cookie 有什么意义呢?
“当 haproxy 的会话在应用程序的会话之前过期时”的问题似乎很重要,但 haproxy 对此的处理对我来说没有意义。
答案1
通常,当您使用 cookie 时,它会出现在带有“set-cookie”标头的后端服务器响应中。这通常是对登录的响应。如果没有发生这种情况,那么 HAProxy 将无法将您绑定到同一个后端服务器
此选项允许 HAProxy 根据 HTTP 请求而不是仅仅使用“set-cookie”的 HTTP 响应来“了解” cookie。
回答您的具体问题:
“服务器正在响应什么?” 任何 HTTP 请求
“了解服务器没有提供的 cookie 有什么意义呢?” 当您的服务器执行非标准操作并且无法按预期提供 cookie 时,它允许 HAProxy 执行粘性。他提供的一个例子是“PHPSESSID”cookie。
“HAproxy 的会话在应用程序的会话之前过期吗?” HAProxy 存储 cookie 以执行粘性。它们在失效之前具有 TTL。如果后端服务器的 TTL 比 HAProxy 的 TTL 长,HAProxy 将在后端服务器之前忘记 cookie。客户端将在请求中拥有 Cookie,HAProxy 将能够重新学习该 cookie。
您的怀疑是有道理的,因为如果您的后端服务器不复制会话信息,那么此选项在 TTL 情况下用处有限。但它仍然适用于非标准 cookie 情况。