Citrix ADC

向ADC生成的cookie插入cookie属性

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

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

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

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

  • LiteralADCCookieAttribute:将其他cookie属性以字符串的形式附加到ADC生成的cookie。

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

请注意

不能同时在负载均衡参数或单个负载均衡配置文件中配置“ADC Cookie Literal Attribute”和“ADC Cookie Computed Attribute”。

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

SameSite属性指示浏览器是否可以将cookie用于跨站点上下文或仅用于同一站点上下文。此外,如果一个应用程序打算在跨站点上下文中被访问,那么它只能通过HTTPS连接来实现。有关详情,请参阅RFC6265

在2020年2月之前SameSite属性未在Citrix ADC中明确设置。浏览器默认为None,不影响Citrix ADC的部署。

但是,随着某些浏览器的升级,例如谷歌Chrome 80,默认的cookie跨域行为会发生变化。的SameSite属性可以设置为以下值之一。谷歌Chrome的默认值设置为Lax。

  • 没有:指示浏览器仅在安全连接的跨站点上下文中使用cookie。
  • 宽松的:指示浏览器对同一站点上下文中的请求使用cookie。在跨站点上下文中,只有安全的HTTP方法(如GET请求)才能使用cookie。
  • 严格:仅在同一站点上下文中使用cookie。

如果cookie中没有SameSite属性,则谷歌Chrome将假定SameSite=Lax的功能。

请注意

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

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

配置ADC生成的cookie

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

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

请注意

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

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

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

要将策略统一应用于Citrix ADC设备上配置的所有应用的ADC生成的cookie,可以在全局LB参数中设置ADC cookie属性。

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

在命令提示符下,输入:

设置lb参数-LiteralADCCookieAttribute  

例子:

set lb parameter -LiteralADCCookieAttribute SameSite=None 

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

在命令提示符下,输入:

设置lb参数- computedadcookieattribute  

例子:

添加ns变量cookieattribute_var -type "text(100)"-scope transaction set lb parameter - computedadcookkieattribute "$cookieattribute_var" add ns assign - samesiteassign -variable "$cookieattribute_var" -set "\"SameSite=None\"" add policy expression pol_iphone "(HTTP.REQ.HEADER(\"User-Agent\"). contains (\"iP\") && (HTTP.REQ.HEADER(\"User-Agent\"))。REGEX_SELECT (re / OS \ \ d + \ \ _ /) .REGEX_SELECT (re / \ \ d + /) .TYPECAST_NUM_T(十进制).EQ(12)。“添加策略表达式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\")))"添加重写策略exception_samesite_attribute "pol_iphone b| | pol_chrome " NOREWRITE添加重写策略append_samesite_attribute true samesiteassign绑定重写全局exception_samesite_attribute 90 110 -type RES_OVERRIDE绑定重写全局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属性

    配置lb parameters.png

  3. 点击好吧

要对Citrix ADC设备上配置的特定应用应用应用策略,可以在绑定到特定应用的LB虚拟服务器的LB配置文件中设置cookie属性参数。

ADC Cookie属性通过在LB配置文件中设置,可以在ADC生成的虚拟服务器特定的cookie中无条件插入cookie属性。

在命令提示符下,输入:

添加lb profile  -LiteralADCCookieAttribute  

例子:

add lb vserver lb - vserver - profile -1 - literaladcookieattribute SameSite=None add lb vserver lb - vserver -1 SSL 10.102.148.37 443 -persistenceType COOKIEINSERT -lbprofilename lb - vserver - profile -1 

计算ADC Cookie属性LB配置文件中的设置允许您根据客户端或服务器属性有条件地将cookie属性插入到ADC生成的cookie中。然后将此LB策略设置为LB虚拟服务器。

在命令提示符下,输入:

添加lb profile  - computedadcookieattribute  

例子:

添加ns变量cookieattribute_var -type "text(100)"-scope transaction add ns assign -variable "$cookieattribute_var" -set "\"SameSite=None\"" add lb profile lb - vserver - profile -1 - computedadcoookieattribute "$cookieattribute_var" add policy expression pol_iphone "(HTTP.REQ.HEADER(\"User-Agent\"). contains (\"iP\") && (HTTP.REQ.HEADER(\"User-Agent\"))。REGEX_SELECT (re / OS \ \ d + \ \ _ /) .REGEX_SELECT (re / \ \ d + /) .TYPECAST_NUM_T(十进制).EQ(12)。“添加策略表达式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)。NOREWRITE添加重写策略append_samesite_attribute为真samesite_assign添加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_samesite_attribute -priority 90 -gotoPriorityExpression 110 -type RESPONSE绑定lb vserver lb - vserver -policyNameappend_samesite_attribute -priority 100 -gotoPriorityExpression 110 -type RESPONSE 
  1. 导航到流量管理>负载均衡>虚拟服务器
  2. 选择虚拟服务器,单击编辑
  3. 高级设置部分中,点击添加配置文件

    Lb虚拟服务器

  4. 配置文件部分中,点击添加,创建LB策略。

    如果您已经创建了概要文件,请从磅概要下拉菜单。

    添加配置文件

  5. 磅概要窗格,根据您的需求为其中一个字段输入适当的值:
  • ADC Cookie属性
  • 计算ADC Cookie属性

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

  1. 点击好吧
  2. 将创建的LB策略设置为中创建的LB虚拟服务器步骤1

验证ns变量配置

要验证在LB参数或LB配置文件中是否正确配置了ADC ns变量,请使用show LB parameter或show LB profile命令。

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

警告消息 原因
没有配置NS变量。为变量配置类型text()和范围transaction 尚未配置NS变量。
配置的NS变量的作用域不是事务。 变量已配置,但作用域未设置为“事务”。
变量类型不是Text()。 变量已配置,但type未设置为“Text”。
配置的NS变量value-max-size大于255。 NS变量配置的值大于255个字符。注意:ADC生成的cookie最多可以添加255个字符。超过最大长度的字符将被截断。

样例输出

在下面的示例中,如果没有配置ns变量,则会显示警告信息。

set lb parameter - computedadcookieattribute "$lbvar"警告:未配置NS变量。请将其配置为类型text()和范围transaction Done 

命令的输出如下所示显示lb参数命令。

显示lb参数全局lb参数:持久性Cookie HttpOnly标志:启用使用加密持久性Cookie:禁用使用端口为哈希lb:是首选直接路由:是保留服务状态:关闭开始RR因子:0跳过Maxclient监控:禁用监控连接关闭:FIN使用合并统计LeastConnection: YES允许基于mac模式的vserver从服务中选择返回流量:禁用允许绑定服务移除:启用TTL基于域的服务器:0秒Citrix ADC Cookie变量名:$lbvar(未配置NS变量)。请配置类型text()和范围transaction) Done 

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

  • 在LB配置文件LB- vserver - profile -1中配置ADC cookie属性。
  • 在LB配置文件中设置ADC Cookie Literal Attribute的值,例如“SameSite=None”。
  • 配置负载均衡策略为负载均衡虚拟服务器(LB- vserver -1),代表GSLB服务。
add gslb vserver gslb - vserver -1 SSL -backupLBMethod roundbin -tolerance 0 -appflowLog DISABLED add gslb site site1 10.102.148.4 -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 -domainName www.gslb.com -TTLadd service service-1 10.102.84.140 SSL 443 add lb vserver lb - vserver - profile -1 - literaladcockieattribute SameSite=None 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 

请注意

还可以使用Computed ADC cookie Attribute有条件地插入cookie属性。

当多个应用程序托管在一个内容交换虚拟服务器后面时,下面的样例配置适用。为了对所有应用应用相同的策略,可以将重写策略绑定到内容交换虚拟服务器上,而不是绑定到LB虚拟服务器上,具体如下:

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

    注意:

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

  • 配置ns变量(cookieattribute_var), Type设置为Text, Scope设置为Transaction。
  • 使用ns变量在全局LB参数中设置Computed ADC Cookie属性。
  • 设置内容切换虚拟服务器插入cookie属性的重写策略(exception_samesite_attribute和append_samesite_attribute)。
添加ns变量cookieattribute_var -type "text(100)"-scope transaction set lb parameter - computedadcookkieattribute "$cookieattribute_var" add ns assign - samesiteassign -variable "$cookieattribute_var" -set "\"SameSite=None\"" add policy expression pol_iphone "(HTTP.REQ.HEADER(\"User-Agent\"). contains (\"iP\") && (HTTP.REQ.HEADER(\"User-Agent\"))。REGEX_SELECT (re / OS \ \ d + \ \ _ /) .REGEX_SELECT (re / \ \ d + /) .TYPECAST_NUM_T(十进制).EQ(12)。“添加策略表达式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)。添加重写策略exception_samesite_attribute "pol_iphone b| | pol_chrome " NOREWRITE添加重写策略append_samesite_attribute true samesiteassign添加lb vserver lb - vserver -1 SSL 10.102.148.35 443添加lb vserver lb - vserver -2 SSL 10.102.148.36 443添加cs vserver cs - vserver -1 SSL 10.102.148.42 443 -persistenceType COOKIEINSERT添加cs action act1 -targetLBVserver v1添加cs action act2 -targetLBVserver v2添加cs策略cs -policy-1 -rule“HTTP.REQ.URL.CONTAINS(\“file1.html \”)”-action act1添加cs -policy-2 -rule "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