向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”。
用例:配置SameSite cookie属性
每个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属性,需要执行以下操作:
- 创建负载均衡虚拟服务器
- 配置负载均衡虚拟服务器的ADC Cookie属性,可通过LB参数或LB配置文件配置。
- 如果使用负载均衡策略,请将负载均衡策略设置为负载均衡虚拟服务器。
- 如果选择使用“计算ADC Cookie属性”,则需要配置相应的重写策略。
请注意
如果LB配置文件绑定到LB虚拟服务器,则会考虑该配置文件参数配置,而不是全局LB参数配置。
您可以通过以下方法设置ADC生成的cookie属性:
- 在负载均衡参数中设置ADC cookie属性
- 配置负载均衡配置文件中的ADC cookie属性
通过CLI配置负载均衡参数中的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配置变量
- 导航到AppExpert >变量,并按添加。
在创建变量页面,选择范围作为事务和类型作为文本从下拉菜单中。
- 输入其他详细信息,单击创建。
通过使用GUI创建分配
配置变量后,可以通过创建赋值来为变量赋值或指定要对变量执行的操作。
- 导航到AppExpert >作业,并按添加。
在创建任务页面,输入详细信息,然后单击创建。
通过GUI界面设置负载均衡参数中的ADC cookie属性
导航到流量管理>负载均衡>修改负载均衡参数。
在配置负载均衡参数窗格,根据您的需求为其中一个字段输入适当的值:
- ADC Cookie属性
- 计算ADC Cookie属性
点击好吧。
使用CLI配置负载均衡策略中的ADC cookie属性
要对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
使用GUI在负载均衡配置文件中设置ADC Cookie属性
- 导航到流量管理>负载均衡>虚拟服务器。
- 选择虚拟服务器,单击编辑。
下高级设置部分中,点击添加配置文件。
在配置文件部分中,点击添加,创建LB策略。
如果您已经创建了概要文件,请从磅概要下拉菜单。
- 在磅概要窗格,根据您的需求为其中一个字段输入适当的值:
- ADC Cookie属性
计算ADC Cookie属性
- 点击好吧。
- 将创建的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
在GSLB部署中插入cookie属性的样例配置
下面的示例配置适用于在与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属性。
在内容切换部署中插入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