ADC

HTTP cookie 持久性

配置 HTTP Cookie 持久性后,NetScaler 设备会在初始客户端请求的 HTTP 标头中设置一个 Cookie。Cookie 包含负载平衡算法选择的服务的 IP 地址和端口。与任何 HTTP 连接一样,客户端随后会将该 cookie 包含在任何后续请求中。

当 NetScaler 设备检测到 Cookie 时,它会将请求转发到 Cookie 中的服务 IP 和端口,从而保持连接的持久性。您可以将这种类型的持久性用于 HTTP 或 HTTPS 类型的虚拟服务器。此持久性类型不会消耗任何设备资源,因此可以容纳无限数量的持久性客户端。

注意:如果客户端的 Web 浏览器配置为拒绝 Cookie,则基于 HTTP cookie 的持久性将不起作用。可能建议在网站上配置 cookie 检查,并警告似乎没有正确存储 Cookie 的客户,如果想使用它,他们需要为网站启用 Cookie。

NetScaler 设备插入的 cookie 的格式为:

NSC_XXXX=<ServiceIP ><ServicePort>

其中:

  • NSC_XXXX 是从虚拟服务器名称派生的虚拟服务器 ID。
  • ServiceIP 和 ServicePort 分别是服务 IP 地址和服务端口的编码表示形式。IP 地址和端口是分开编码的。

您可以为此类持久性设置超时值,以指定会话的非活动期间。当连接在指定时间段内处于非活动状态时,NetScaler 设备会丢弃持久会话。来自同一客户端的任何后续连接都会导致根据配置的负载平衡方法选择新服务器,并建立新的持久性会话。

注意:如果您将超时值设置为 0,则 NetScaler 设备不会指定过期时间,而是设置在客户端浏览器关闭时不保存的会话 cookie。

默认情况下,NetScaler 设备会设置 HTTP 版本 0 Cookie,以实现与客户端浏览器的最大兼容性。(只有某些 HTTP 代理可以理解版本 1 的 cookie;大多数常用的浏览器不能。)您可以将设备配置为设置 HTTP 版本 1 Cookie,以符合 RFC2109。对于 HTTP 版本 0 的 cookie,设备会将 cookie 的过期日期和时间作为绝对协调世界时间 (GMT) 插入。它将此值计算为设备上当前 GMT 时间与超时值之和。对于 HTTP 版本 1 的 cookie,设备通过设置 HTTP Cookie 的“最大年龄”属性来插入相对过期时间。在这种情况下,客户端的浏览器将计算实际到期时间。

要基于设备插入的 Cookie 配置持久性,请参阅 配置不需要规则的持久性类型

在 HTTP cookie 中,设备默认设置 HTTPOnly 标志以指示 cookie 不可编写脚本,且不得向客户端应用程序透露。因此,客户端脚本无法访问 cookie,并且客户端不容易受到跨站点脚本的影响。

但是,某些浏览器不支持该 HTTPOnly 标志,因此可能无法返回 cookie。因此,持久性被打破。对于不支持该标志的浏览器,您可以省略持久性 Cookie 中的 HTTPOnly 标志。

使用 CLI 更改 HTTPOnly 标志设置

在命令提示符下,键入:

set lb parameter -httpOnlyCookieFlag (ENABLED|DISABLED)
<!--NeedCopy-->

示例:

>  set lb parameter -httpOnlyCookieFlag disabled
   Done
> show lb parameter
  Global LB parameters:
       Persistence Cookie HttpOnly Flag: DISABLED
       Use port for hash LB: YES
 Done
<!--NeedCopy-->

使用 GUI 更改 HTTPOnly 标志设置

  1. 导航到 流量管理 > 负载平衡 > 配置负载平衡参数,然后选择或清除 持久性 Cookie HttpOnly 标志。

从 10.5 版本 55.8 开始,除了任何 SSL 加密外,您还可以对 Cookie 进行加密。

要使用命令行界面加密 Cookie,请在命令提示符下键入

set lb parameter -UseEncryptedPersistenceCookie ENABLED -cookiePassphrase test
<!--NeedCopy-->
  1. 导航到流量管理>更改负载平衡参数,选择对持久性 Cookie 值进行编码,然后在 Cookie密码短语中输入密码。
HTTP cookie 持久性