ADC

HTTP cookie 持久性

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

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

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

Citrix ADC 设备插入的 cookie 格式为:

NSC_XXXX=<ServiceIP ><ServicePort>

其中:

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

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

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

默认情况下,Citrix ADC 设备会设置 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 持久性