This content has been machine translated dynamically.
Dieser Inhalt ist eine maschinelle Übersetzung, die dynamisch erstellt wurde. (Haftungsausschluss)
Cet article a été traduit automatiquement de manière dynamique. (Clause de non responsabilité)
Este artículo lo ha traducido una máquina de forma dinámica. (Aviso legal)
此内容已经过机器动态翻译。 放弃
このコンテンツは動的に機械翻訳されています。免責事項
이 콘텐츠는 동적으로 기계 번역되었습니다. 책임 부인
Este texto foi traduzido automaticamente. (Aviso legal)
Questo contenuto è stato tradotto dinamicamente con traduzione automatica.(Esclusione di responsabilità))
This article has been machine translated.
Dieser Artikel wurde maschinell übersetzt. (Haftungsausschluss)
Ce article a été traduit automatiquement. (Clause de non responsabilité)
Este artículo ha sido traducido automáticamente. (Aviso legal)
この記事は機械翻訳されています.免責事項
이 기사는 기계 번역되었습니다.책임 부인
Este artigo foi traduzido automaticamente.(Aviso legal)
这篇文章已经过机器翻译.放弃
Questo articolo è stato tradotto automaticamente.(Esclusione di responsabilità))
Translation failed!
配置和使用变量
您必须先创建一个变量,然后分配一个值或指定必须对变量执行的操作。执行这些操作后,您可以将分配用作策略操作。
注意:一旦配置,变量的设置就无法修改或重置。如果需要更改变量,则必须删除变量和对变量的所有引用(表达式和赋值)。然后可以使用新设置重新添加变量,并且可以重新添加引用(表达式和赋值)。
使用命令行界面配置变量
- 创建一个变量。
add ns variable <name> -type <string> [-scope global] [-ifFull ( undef | lru )] [-ifValueTooBig ( undef | truncate )] [-ifNoValue ( undef | init )] [-init <string>] [-expires <positive_integer>] [-comment <string>]
<!--NeedCopy-->
注意:有关命令参数的说明,请参阅手册页“man add ns 变量”。
示例 1:创建一个名为“my_counter”的 ulong 变量并将其初始化为 1。
add ns variable my_counter –type ulong -init 1
<!--NeedCopy-->
示例 2:创建名为“用户特权映射”的映射。映射将包含最长 15 个字符的键和最长 10 个字符的文本值,最多可包含 10000 个条目。
add ns variable user_privilege_map -type map(text(15),text(10),10000)
<!--NeedCopy-->
注意:如果映射包含 10000 个未过期条目,则新密钥的分配将重复使用最近使用最少的条目之一。默认情况下,试图为不存在的键获取值的表达式将初始化一个空文本值。
指定值或指定要对变量执行的操作。这是通过创建任务来完成的。
add ns assignment <name> -variable <expression> [-set <expression> | -add <expression> | -sub <expression> | -append <expression> | -clear] [-comment <string>]
<!--NeedCopy-->
注意:使用变量选择器 ($) 引用变量。因此, $variable1 用于引用文本或 ulong 变量。同样, $variable2[key-expression] 用于引用映射变量。
示例 1:定义一个名为“inc_my_counter”的赋值,该赋值自动将 1 添加到“my_counter”变量。
add ns assignment inc_my_counter -variable $my_counter -add 1
<!--NeedCopy-->
示例 2:定义一个名为“set_user_權限”的赋值,该赋值将客户端 IP 地址的条目添加到“user_權限”HTTP 标注返回的值。
add ns assignment set_user_privilege -variable $user_privilege_map[client.ip.src.typecast_text_t] -set sys.http.callout(get_user_privilege)
<!--NeedCopy-->
注意:如果该密钥的条目已存在,则该值将被替换。否则,将添加密钥和值的新条目。根据 user_privileged ge_map 之前的声明,如果映射已经有 10000 个条目,则最近使用最少的条目之一将被重新用于新的键和值。
-
调用策略中的变量分配。
有两个函数可以对映射变量进行操作。
-
$name.valueExists(key-expression)。如果映射中存在由键表达式选择的值,则返回 true。否则返回 false。如果映射条目存在,此函数将更新过期信息和 LRU 信息,但如果该值不存在,则不会创建新的映射条目。
-
$name.valueCount。返回变量当前保存的值的数量。这是映射中的条目数。对于单例变量,如果变量未初始化,则为 0,否则为 1。
示例: 使用压缩策略调用名为“set_user_權”的分配。
-
add cmp policy set_user_privilege_pol -rule $user_privilege_map.valueExists(client.ip.src.typecast_text_t).not -resAction set_user_privilege
<!--NeedCopy-->
用例在响应端插入 HTTP 标头
以下示例显示了单例变量的示例。
添加文本类型的单例变量。此变量最多可容纳 100 字节数据。
add ns variable http_req_data -type text(100) -scope transaction
<!--NeedCopy-->
添加一个赋值操作,该操作将用于将 HTTP 请求数据存储到变量中。
add ns assignment set_http_req_data -variable $http_req_data -set http.req.body(100)
<!--NeedCopy-->
添加一个重写操作以插入 HTTP 标头,其值将从变量中获取。
add rewrite action act_ins_header insert_http_header user_name $http_req_data.after_str("user_name").before_str("password")
<!--NeedCopy-->
添加一个重写策略,该策略将在请求时间内进行评估,并采取分配操作来存储数据。当我们执行此策略时,我们将采取赋值操作并将数据存储到 ns 变量 (http_req_data)
add rewrite policy pol_set_variable true set_http_req_data
bind rewrite global pol_set_variable 10 -type req_dEFAULT
<!--NeedCopy-->
添加将在响应时间进行评估的重写策略,并在响应中添加 HTTP 标头。
add rewrite policy pol_ins_header true act_ins_header
bind rewrite global pol_ins_header 10 -type res_dEFAULT
<!--NeedCopy-->
分配操作
在 Citrix ADC 设备中,当策略规则的计算结果为 true 时,将触发绑定到策略的分配操作。操作更新可用于后续策略规则评估的变量中的值。通过这种方式,同一个变量可以更新并用于同一功能中的后续策略评估。以前,设备仅在评估功能中的所有策略后才执行分配操作,当关联的分配操作的策略评估为 true 时。因此,由分配操作设置的变量值不能用于功能内的后续策略规则评估。
通过控制 Citrix ADC 设备上客户端访问列表的用例,可以更好地理解此功能。访问决策由一个单独的 Web 服务提供,请求 GET /client-access?<client-IP-address>
在正文中返回“BLOCK”或“ALLOCK”的响应。HTTP 标注配置为包括与传入请求关联的客户端的 IP 地址。Citrix ADC 设备收到来自客户端的请求时,该设备将生成标注请求并将其发送到标注服务器,该服务器托管一个包含列入黑名单的 IP 地址的数据库和一个 HTTP 标注代理,用于检查客户端的 IP 地址是否列在数据库中。HTTP 标注代理接收标注请求,检查是否列出了客户端的 IP 地址,并发送响应。响应是状态代码 200、302 以及正文中的“阻止”或“允许”。设备根据状态代码执行策略评估。如果策略评估为 true,则会立即触发分配操作,并且操作将值设置为变量。设备在同一模块中为后续策略评估使用并设置此变量值。
配置分配操作的用例
请按照以下步骤配置分配操作并将变量用于后续策略:
-
访问决策由单独的 Web 服务提供,请求在正文中返回带有 BLOCK 或 ALLOCK 的响应。
GET /url-service>/url-allowed?<URL path>
-
设置映射变量以保存 URL 的访问决策。
add ns variable url_list_map -type 'map(text(1000),text(10),10000)'
-
设置 HTTP 标注以将访问请求发送到 Web 服务。
add policy httpCallout url_list_callout -vserver url_vs -returnType TEXT -urlStemExpr '"/url-allowed?" + HTTP.REQ.URL.PATH' -resultExpr 'HTTP.RES.BODY(10)'
-
设置分配操作以调用标注以获取访问决策,并将其分配给 URL 的映射条目。
add ns assignment client_access_assn -variable '$client_access_map[CLIENT.IP.SRC.TYPECAST_TEXT_T]' -set SYS.HTTP_CALLOUT(client_access_callout)
-
设置响应程序操作,以便在 URL 请求被阻止时发送 403 响应。
add responder action url_list_block_act respondwith '"HTTP/1.1 403 Forbidden\\r\\n\\r\\n"'
-
设置响应程序策略以设置 URL 的映射条目(如果尚未设置)。通过立即操作增强功能,在评估此策略时会设置映射条目值。在增强之前,在评估所有响应程序策略的决策由单独的 Web 服务提供之前,才会完成分配。
add responder policy url_list_assn_pol '!$url_list_map.VALUEEXISTS(HTTP.REQ.URL.PATH)' url_list_assn
-
如果 URL 的映射条目值为 BLOCK,则设置响应程序策略以阻止对 URL 的访问。通过立即操作增强功能,上述策略设置的映射条目可用于此策略。在增强之前,此时仍将取消设置映射条目。
add responder policy client_access_block_pol '$client_access_map[CLIENT.IP.SRC.TYPECAST_TEXT_T] == "BLOCK"' client_access_block_act
-
将响应程序策略绑定到虚拟服务器。注意:我们无法全局绑定策略,因为我们不希望在单独的虚拟服务器上为 HTTP 标注执行策略。
bind lb vserver vs -policyName client_access_assn_pol -priority 10 -gotoPriorityExpression NEXT -type REQUEST
bind lb vserver vs -policyName client_access_block_pol -priority 20 -gotoPriorityExpression END -type REQUEST
使用配置实用程序配置变量
- 导航到 AppExpert > NS 变量,以创建一个变量。
- 导航到 AppExpert > NS 分配,将值分配给变量。
- 导航到要将任务配置为操作的相应功能区域。
共享
共享
This Preview product documentation is Cloud Software Group Confidential.
You agree to hold this documentation confidential pursuant to the terms of your Cloud Software Group Beta/Tech Preview Agreement.
The development, release and timing of any features or functionality described in the Preview documentation remains at our sole discretion and are subject to change without notice or consultation.
The documentation is for informational purposes only and is not a commitment, promise or legal obligation to deliver any material, code or functionality and should not be relied upon in making Cloud Software Group product purchase decisions.
If you do not agree, select I DO NOT AGREE to exit.