通过使用 HTTP Cookie 持久性模式,可以在会话期间将客户端固定到一个服务器。可以将 HTTP Cookie 持久性应用于任何附加了 HTTP 应用程序配置文件的虚拟服务。通过使用这种持久性方法,NSX Advanced Load Balancer SE 将 HTTP Cookie 插入到服务器对客户端的第一个响应中。

要使用 HTTP Cookie 持久性,不需要在后端服务器上更改配置。NSX Advanced Load Balancer 创建的 HTTP 持久性 Cookie 对现有服务器 Cookie 或行为没有任何影响。

注:

NSX Advanced Load Balancer 还支持依赖于 Cookie 的应用程序 Cookie 持久性模式。应用程序 Cookie 方法根据现有服务器 Cookie 中的信息启用持久性,而不是插入 NSX Advanced Load Balancer 创建的新 Cookie。

要验证 HTTP Cookie 持久性是否正常工作,请为虚拟服务分析启用所有标头,并查看日志以查看客户端发送的 Cookie。

有关其他持久性方法和选项的说明,请参见应用程序 Cookie 持久性

Cookie 格式

以下是 NSX Advanced Load Balancer 创建的 HTTP 会话持久性 Cookie 示例。

Set-Cookie: JKQBPMSG=026cc2fffb-b95b-41-dxgObfTEe_IrnYmysot-VOVY1_EEW55HqmENnvC; path=/

Cookie 负载包含后端服务器 IP 地址和端口。

该负载是使用 AES-256 加密的。在客户端发出后续 HTTP 请求时,它包含 Cookie,SE 使用该 Cookie 确保客户端的请求传送到同一服务器。

配置 Cookie 持久性

NSX Advanced Load Balancer 21.1.3 版本开始,引入了 is_persistent_cookie 字段;在设置为 True 时,该字段在 HTTP Cookie 中启用持久性。默认情况下,该字段设置为 False,这意味着 Cookie 默认为会话 Cookie。

Cookie 持久性超时

可以通过持久性配置文件配置持久性超时。持久性超时设置持久性 Cookie 的最长有效时间。

持久性超时应用于持久性 Cookie,这些 Cookie 是 NSX Advanced Load Balancer 为客户端与使用持久性配置文件的虚拟服务的各个会话创建的。

通常,在终止与 Cookie 关联的会话后或关闭浏览器时,客户端或浏览器负责清除持久会话 Cookie。设置持久性超时可以处理客户端或浏览器未清除会话 Cookie 的情况。

如果设置了持久性超时,则根据配置文件创建的任何会话 Cookie 的最大生命周期设置为该超时。在这种情况下,Cookie 的有效期最长为配置的超时,从 NSX Advanced Load Balancer 创建 Cookie 时算起。

例如,如果持久性超时设置为 720 分钟,则根据配置文件创建的 Cookie 的有效期最长为 12 小时(从创建 Cookie 时算起)。在持久性超时到期后,Cookie 将过期而不再有效。

默认情况下,没有超时。发送的 Cookie 是会话 Cookie,在会话结束后,客户端将清除该 Cookie。

HttpCookiePersistenceProfile 中的 timeout 字段将转换为 max-agemax-age 属性表示 Cookie 过期前经过的秒数。如果 max-age 值为零或更小(负数),则 Cookie 立即过期。

注:
  • 如果停用了 is_persistent_cookie 标记,超时行为将保持不变(Cookie 根据 timeout 的非零值过期)。

  • 如果启用了该标记并且 timeout 值为零,则 Cookie 立即过期,因为 max-age 设置为零。

要配置 Cookie 持久性超时,请使用 Set-Cookie: <cookie-name>=<cookie-value> Max-Age=<number>

示例:

Set-Cookie: JKQBPMSG=026cc2fffb-b95b-41-dxgObfTEe_IrnYmysot-VOVY1_EEW55HqmENnvC; path=/ ; Max-Age=3600

持久性镜像

由于客户端保留 Cookie 并在访问站点时提供 Cookie,因此,NSX Advanced Load Balancer 不需要存储持久性信息或将持久性映射镜像到其他 SE。这样,就可以轻松地进行扩展。

持久性持续时间

HTTP Cookie 持久性利用基于会话的 Cookie,该 Cookie 在客户端与 NSX Advanced Load Balancer 保持 HTTP 会话时一直有效。如果客户端关闭浏览器,将删除该 Cookie 并终止持久性。

NSX Advanced Load Balancer UI 配置选项

要使用 UI 启用 Cookie 持久性,请导航到模板 > 配置文件 > 持久性

下表描述了在持久性配置文件编辑器中配置持久性配置文件所需的字段:

字段名称

描述

名称

持久性配置文件的唯一名称。

在持久性服务器关闭时选择新的服务器

将服务器标记为关闭(例如,由运行状况监控器标记或达到连接限制时标记)时执行的操作。指示是继续将持久保存的现有用户的请求发送到该服务器,还是通过新服务器对其进行负载均衡。

立即NSX Advanced Load Balancer 立即选择一个新服务器以替换标记为关闭的服务器,并将持久性条目切换到新服务器。

从不:不选择替换服务器。持久性条目需要根据持久性类型正常过期。

描述

配置文件的可选自定义描述。

类型

HTTP Cookie。如果更改类型,则会将配置文件更改为另一种持久性方法。

HTTP Cookie 名称

该字段显示为空。通过填充该可选字段,将在 Cookie 中插入用户选择的自定义名称。如果未填充,则 NSX Advanced Load Balancer 自动生成随机的 8 字符字母名称。

是持久性 Cookie

选择该选项以启用持久性。如果未启用该选项,则 Cookie 是会话 Cookie。

持久性超时

任何会话 Cookie 的最大生命周期。允许的范围是 1-14400 分钟。没有值或零表示没有超时。

始终发送

默认情况下,在会话开始时将持久性 Cookie 发送到客户端一次。然后,客户端使用该 Cookie 响应每个请求。不过,如果在以前的响应中未收到 Cookie,某些 Web 应用程序(例如,包含 Java 或 JavaScript 的应用程序)可能没有在其请求中包含该 Cookie。启用始终发送将导致 NSX Advanced Load Balancer 在每个响应中包含 Cookie。

注:

NSX Advanced Load Balancer 支持为它设置的 Cookie 设置 HTTP-Only 标记。设置该属性有助于禁止第三方脚本访问该 Cookie(如果浏览器支持)。将为任何 HTTP 或终止的 HTTPS 虚拟服务激活该功能。

如果为一个 Cookie 设置 HTTP-Only 标记,它向浏览器通知只能由服务器访问该特殊 Cookie。严格禁止尝试从客户端脚本中访问该 Cookie 的任何操作。