Citrix ADC

将cookie属性插入ADC生成的cookie

Web管理员可以将其他饼干属性插入到Citrix ADC设备生成的Cookie中。这些额外的饼干属性有助于根据应用程序访问模式为ADC生成的饼干执行所需的策略。

以下功能使用ADC生成的cookie来实现持久性。

  • 负载平衡cookie持久性
  • 负载平衡组cookie持久性
  • GSLB站点持久性
  • 内容切换cookie持久性

您可以使用以下参数将其他cookie属性插入到ADC生成的cookie中:

  • LiteraladcCookieAttribute:将其他cookie属性作为字符串追加到ADC生成的cookie。

  • ComputedADCcookieAttribute:使用ADC ns变量根据客户端或服务器属性(例如用户代理版本)有条件地将饼干属性附加到ADC生成的饼干。

注意

您不能同时在负载平衡参数或单个负载平衡配置文件中同时配置文字ADC饼干属性和计算ADC饼干属性。

每个cookie都有一个与之关联的域。当Cookie的域与用户地址栏中的网站域匹配时,这将被视为同一站点(或第一方)上下文。如果与饼干关联的域名与外部服务匹配,而不是用户地址栏中的网站,则这将被视为跨站点(或第三方)上下文。

sameSite属性指示浏览器是否可以用于跨站点上下文还是仅用于同一站点上下文。此外,如果应用程序打算在跨站点上下文中访问,那么它只能通过HTTPS连接进行访问。有关详细信息,请参阅RFC6265

直到 2020 年 2 月,SameSite属性没有在Citrix ADC中明确设置。浏览器将默认值设为“无”,并且不影响Citrix ADC部署。

但是,在某些浏览器升级后,例如80年谷歌Chrome,饼干的默认跨域行为会发生变化。可以将sameSite属性设置为以下值之一。谷歌Chrome的默认值设置为松懈。

  • 无:表示浏览器仅在安全连接的情况下在跨站点上下文中使用Cookie。
  • 宽松的:表示浏览器在同一站点上下文中使用cookie处理请求。在跨网站上下文中,只有像 GET 请求这样的安全 HTTP 方法才能使用 cookie。
  • 严格:仅在同一站点上下文中使用cookie。

如果饼中没有相同列表属性,谷歌Chrome采用SameSite =松懈的功能。

注意

对于某些版本的其他浏览器,sameSite属性的默认值可能设置为。在某些浏览器版本中,“SameSite = 无”可以区别对待。例如,以下浏览器拒绝一个具有“SameSite = none”的 cookie:

  • Chrome 51到Chrome 66的Chrome版本(包括两端)
  • Android版本12.13.2之前的UC浏览器的版本

要配置ADC生成的cookie属性,必须执行以下操作:

  1. 创建负载平衡虚拟服务器
  2. 通过LB参数或LB配置文件为负载平衡虚拟服务器设置ADC Cookie属性。
  3. 如果使用lb配置文件,请将lb配置文件设置为负载平衡虚拟服务器。
  4. 如果选择使用“计算ADC Cookie属性”,请配置相关的重写策略。

注意

如果lb配置文件绑定到lb虚拟服务器,则考虑配置文件参数配置,而不是全局lb参数配置。

您可以通过以下方法设置ADC生成的cookie属性:

  • 在负载平衡参数中设置ADC cookie属性
  • 在负载平衡配置文件中设置ADC cookie属性

要统一对Citrix ADC设备上配置的所有应用程序的ADC生成的饼干应用策略,可以在全局磅参数中设置ADC饼干属性。

文字ADC Cookie属性设置允许您无条件地将cookie属性插入ADC生成的cookie。

在命令提示符下,键入:

设置lb参数-LiteralADCCookieAttribute  

示例:

set lb parameter -LiteralADCCookieAttribute SameSite=无

计算ADC Cookie属性"设置允许您根据客户端或服务器属性有条件地将cookie属性插入ADC生成的cookie。

在命令提示符下,键入:

设置lb参数-ComputedADCCookieAttribute  

示例:

添加ns变量cookieattribute_var类型"text(100)"-scope transaction set lb参数-ComputedADCCookieAttributE "$cookieattribute_var" add ns assignment samesiteassign -variable "$cookieattribute_var" -set ""SameSite=None"" add policy expression pol_iphone "(HTTP.REQ.HEADER("User-Agent"). contains ("iP") && (HTTP.REQ.HEADER("User-Agent"). delete =None"REGEX_SELECT (re / OS \ d + \ \ _ /) .REGEX_SELECT (re / \ d + /) .TYPECAST_NUM_T(十进制).EQ(12)。typecast_text_t ALT "false").eq("true"))" add policy expression pol_chrome "(HTTP.REQ.HEADER("User-Agent"). contains ("Chrom") && (HTTP.REQ.HEADER("User-Agent"). regex_select (re/Chrom.*\d+./). regex_select (re/\d+/). typecast_num_t (DECIMAL). between(51,66)。typecast_text_t ALT "false").eq("true"))" add rewrite policy exception_samesite_attribute "pol_iphone || pol_chrome " NOREWRITE add rewrite policy append_samesite_attribute true samesiteassign bind rewrite global exception_samesite_attribute 90 110 -type RES_OVERRIDE bind rewrite global append_samesite_attribute 100 110 -type RES_OVERRIDE 

使用GUI配置变量

  1. 导航到AppExpert >变量,然后单击添加
  2. 创建变量页面中,从下拉菜单中选择范围事务类型文本

    为ADC Cookie创建变量

  3. 输入其他详细信息,然后单击创建

使用GUI创建作业

配置变量后,您可以通过创建赋值来指定值或指定要对变量执行的操作。

  1. 导航到AppExpert >任务,然后单击添加
  2. 创建作业页面中,输入详细信息,然后单击创建

    为adc变量创建赋值

  1. 导航到流量管理 > 负载平衡 > 更改负载平衡参数

    更改lb参数

  2. 在“配置负载平衡参数窗格中,根据您的要求为以下任一字段输入相应的值:

    • 文字ADC Cookie属性
    • 计算的ADC Cookie属性

    配置磅parameters.png

  3. 单击好吧(确定)。

要为Citrix ADC设备上配置的特定应用程序应用策略,可以在绑定到特定于应用程序的磅虚拟服务器的磅配置文件中设置饼干属性参数。

磅配置文件中的"文字ADC Cookie属性”设置允许您无条件地将饼干属性插入ADC生成的特定于虚拟服务器的饼干。

在命令提示符下,键入:

add lb profile  -LiteralADCCookieAttribute  

示例:

add lb vserver lb - vserver - profile -1 -LiteralADCCookieAttribute SameSite=无add lb vserver lb - vserver -1 SSL 10.102.148.37 443 -persistenceType COOKIEINSERT -lbprofilename lb - vserver - profile -1 

Lb配置文件中的”计算ADC Cookie属性”设置允许您根据客户端或服务器属性有条件地将饼干属性插入ADC生成的饼干。然后,将此lb配置文件设置为lb虚拟服务器。

在命令提示符下,键入:

add lb profile  -ComputedADCCookieAttribute  

示例:

添加ns变量cookieattribute_var类型"text(100)"-scope transaction add ns assign samesiteassign -variable "$cookieattribute_var" -set ""SameSite=None"" add lb profile lb - vserver - profile -1 -ComputedADCCookieAttributE "$cookieattribute_var" add policy expression pol_iphone "(HTTP.REQ.HEADER("User-Agent"). contains ("iP") && (HTTP.REQ.HEADER("User-Agent"). sql ")。REGEX_SELECT (re / OS \ d + \ \ _ /) .REGEX_SELECT (re / \ d + /) .TYPECAST_NUM_T(十进制).EQ(12)。typecast_text_t ALT "false").eq("true"))" add policy expression pol_chrome "(HTTP.REQ.HEADER("User-Agent"). contains ("Chrom") && (HTTP.REQ.HEADER("User-Agent"). regex_select (re/Chrom.*\d+./). regex_select (re/\d+/). typecast_num_t (DECIMAL). between(51,66)。typecast_text_t ALT "false").eq("true"))" add rewrite policy exception_sameesite_attribute "pol_iphone || pol_chrome " NOREWRITE add rewrite policy append_samesite_attribute true samesiteassign add lb vserver lb - vserver -1 SSL 10.102.148.37 443 -persistenceType COOKIEINSERT -lbprofilename lb - vserver - profile -1 bind lb vserver lb - vserver -1 -policyName exception_sameesite_attribute -priority 90 -gotoPriorityExpression 110 -type RESPONSE bind lb vserver lb - vserver -1 -policyName附录_samesite_attribute -priority 100 -gotoPriorityExpression 110 -type RESPONSE 
  1. 导航到流量管理 > 负载平衡 > 虚拟服务器
  2. 选择虚拟服务器,然后单击编辑(编辑)。
  3. 高级设置部分,单击添加配置文件

    Lb虚拟服务器

  4. 配置文件部分,单击添加以创建lb配置文件。

    如果您已经创建了个人资料,请从Lb配置文件下拉菜单中选择它。

    添加资料

  5. 在“Lb配置文件窗格中,根据您的要求为其中一个字段输入相应的值:
  • 文字ADC Cookie属性
  • 计算的ADC Cookie属性

    LB profile.png中的字面计算属性

  1. 单击好吧(确定)。
  2. 将创建的lb配置文件设置为在步骤 1中创建的lb虚拟服务器。

验证ns变量配置

要验证ADC ns变量是否在磅参数或磅配置文件中正确配置,请使用显示磅参数或显示磅配置文件命令。

下表列出了ns变量未正确配置时的各种警告消息及其原因。

警告消息 原因
Ns变量未配置。使用Text()类型配置它并为变量作为事务范围 Ns变量尚未配置。
配置的ns变量的范围不是事务。 变量已配置,但范围未设置为"事务"。
变量的类型不是Text()。 变量已配置,但类型未设置为"文本"。
Ns变量配置的最大值大小大于255。 为ns变量配置的值大于255个字符。注意:ADC生成的cookie最多可以附加255个字符。超过最大长度的字符将被截断。

示例输出

在以下示例中,当未配置ns变量时,将显示警告消息。

设置lb参数-ComputedADCCookieAttribute "$lbvar"警告:NS变量未配置。请使用类型text()和范围transaction Done 

警告消息将显示在显示磅参数命令的以下输出中。

show lb parameter全局lb参数:Persistence Cookie HttpOnly Flag: ENABLED Use Encrypted Persistence Cookie: DISABLED Use Port For Hash lb: YES首选直连路由:YES Retain Service State: OFF启动RR因子:0 Skip Maxclient For Monitoring: DISABLED Monitor Connection Close: FIN使用consolidated stats For LeastConnection: YES允许基于mac模式的vserver从服务中选择返回流量:DISABLED允许绑定服务删除:ENABLED0秒Citrix ADC Cookie变量名:$lbvar(NS变量未配置。请使用类型text()和范围transaction配置它。——NeedCopy >

以下示例配置适用于在与lb虚拟服务器对应的GSLB服务上配置的站点持久性。要将一些额外的cookie属性附加到GSLB cookie,请执行以下配置。

  • 在LB配置文件(LB- vserver配置文件-1)中设置ADC cookie属性。
  • 在LB配置文件中设置文字ADC Cookie属性值,例如" SameSite=None "。
  • 将LB配置文件设置为代表GSLB服务的负载平衡虚拟服务器(LB-vserver-1)。
add gslb vserver gslb - vserver -1 SSL -backupLBMethod ROUNDROBIN -tolerance 0 -appflowLog DISABLED add gslb site site1 10.102.148.4 -publicIP 10.102.148.4 add gslb service site1_gsvc1 10.102.148.35 SSL 443 -publicIP 10.102.148.35 -publicPort 443 -maxClient 0 -siteName site1 -sitePersistence HTTPRedirect -sitePrefix ss1 -cltTimeout 180 -svrTimeout 360 -downStateFlush ENABLED bind gslb vserver gslb - vserver -1 -serviceName site1_gsvc1 bind gslb vserver gslb - vserver -domainName www.gslb.com -TTLadd service service-1 10.102.84.140 SSL 443 add lbprofile lb - vserver - profile -1 -LiteralADCCookieAttribute SameSite=无add lb vserver lb - vserver -1 SSL 10.102.148.37 443 -persistenceType COOKIEINSERT -lbprofilename lb - vserver - profile -1 bind lb vserver lb - vserver -1 service-1 

注意

您还可以使用"计算的ADC Cookie属性"有条件地插入Cookie属性。

当多个应用程序托管在内容交换虚拟服务器后面时,以下示例配置将适用。要将同一策略应用于所有应用程序,请将重写策略绑定到内容交换虚拟服务器而不是磅虚拟服务器,如下所示:

  • 在LB参数中设置ADC cookie属性。

    注意:您也可以在LB配置文件中设置ADC cookie属性。

  • 将类型的ns变量(cookie属性_var)配置为"文本",将范围设置为"事务处理"。
  • 使用ns变量在全局LB参数中设置计算的ADC Cookie属性。
  • 为内容切换虚拟服务器设置重写策略(exception_samesite_attribute和append_samesite_attribute),以便插入饼干属性。
添加ns变量cookieattribute_var类型"text(100)"-scope transaction set lb参数-ComputedADCCookieAttributE "$cookieattribute_var" add ns assignment samesiteassign -variable "$cookieattribute_var" -set ""SameSite=None"" add policy expression pol_iphone "(HTTP.REQ.HEADER("User-Agent"). contains ("iP") && (HTTP.REQ.HEADER("User-Agent"). delete =None"REGEX_SELECT (re / OS \ d + \ \ _ /) .REGEX_SELECT (re / \ d + /) .TYPECAST_NUM_T(十进制).EQ(12)。typecast_text_t ALT "false").eq("true"))" add policy expression pol_chrome "(HTTP.REQ.HEADER("User-Agent"). contains ("Chrom") && (HTTP.REQ.HEADER("User-Agent"). regex_select (re/Chrom.*\d+./). regex_select (re/\d+/). typecast_num_t (DECIMAL). between(51,66)。typecast_text_t ALT "false").eq("true"))" add重写策略exception_sameesite_attribute "pol_iphone || pol_chrome " NOREWRITE add重写策略append_samesite_attribute true samesiteassign add lb vserver lb - vserver -1 SSL 10.102.148.35 443 add lb vserver lb - vserver -2 SSL 10.102.148.36 443 add cs vserver cs - vserver -1 SSL 10.102.148.42 443 -persistenceType COOKIEINSERT add cs action act1 -targetLBVserver v1 add cs action act2 -targetLBVserver v2 add cs policy cs -policy-1 -rule . txt add lb vserver lb - vserver -1 SSL 10.102.148.36 443 add cs vserver cs - vserver -1 SSL 10.102.148.42 add cs action act1 -targetLBVserver v1 add cs action act2 -targetLBVserver v2 add cs policy cs -policy-1 -rule . txt“HTTP.REQ.URL.CONTAINS(“file1.html”)”添加cs -policy-2的HTTP.REQ.URL.CONTAINS("file2.html")"-action act2 bind cs vserver cs - vserver -1 -policyName cs -policy-1 -priority 1 bind cs vserver cs - vserver -1 -policyName cs -policy-2 -priority 2 bind cs vserver -policyName exception_samesite_attribute 90 110 -type RES_OVERRIDE bind cs vserver -policyName append_samesite_attribute 100 110 -type RES_OVERRIDE 
将cookie属性插入ADC生成的cookie