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 variable”。
示例 1:创建一个名为“my_counter”的 ulong 变量并将其初始化为 1。
add ns variable my_counter –type ulong -init 1
<!--NeedCopy-->
示例 2:创建名为“user_privilege_map”的地图。地图将包含最大长度为 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 [键表达式] 用于引 用地图变量。
示例 1:定义一个名为“inc_my_counter”的赋值,该赋值会自动向“my_counter”变量加 1。
add ns assignment inc_my_counter -variable $my_counter -add 1
<!--NeedCopy-->
示例 2:定义一个名为“set_user_privilege”的分配,该赋值将客户端 IP 地址的条目添加到“user_privilege_map”变量中,其值由“get_user_privilege”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_privilege_map 声明,如果地图已经有 10000 个条目,则最近使用最少的条目之一将被重复用作新的键和值。
-
在策略中调用变量分配。
有两个函数可以对地图变量进行操作。
-
$name.value存在(键表达式)。如果键表达式在地图中选择了一个值,则返回 true。否则返回 false。如果地图条目存在,此函数将更新过期和 LRU 信息,但如果该值不存在,则不会创建新的地图条目。
-
$name.valueCount。返回变量当前持有的值的数量。这是地图中的条目数。对于单例变量,如果变量未初始化,则为 0,否则为 1。
示例: 使用压缩策略调用名为“set_user_privilege”的分配。
-
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-->
分配操作
在 NetScaler 设备中,当策略规则的评估结果为真时,会触发绑定到策略的分配操作。该操作会更新变量中的值,该值可用于后续的策略规则评估。这样,可以更新相同的变量并将其用于同一功能的后续策略评估。以前,只有在评估了功能中的所有策略后,当相关分配操作的策略评估为真时,设备才会执行分配操作。因此,分配操作设置的变量值不能用于功能内的后续策略规则评估。
通过控制NetScaler设备上客户端访问列表的用例,可以更好地理解此功能。访问决策由单独的 Web 服务提供,请求 GET /client-access?<client-IP-address>
返回正文中带有“BLOCK”或“ALLOW”的响应。HTTP 调用被配置为包括与传入请求相关的客户端的 IP 地址。当 NetScaler 设备收到来自客户端的请求时,设备会生成呼出请求并将其发送到呼叫服务器,该服务器托管一个包含列入黑名单 IP 地址的数据库和一个检查客户端的 IP 地址是否在数据库中列出的 HTTP 呼出代理。HTTP 呼出代理接收呼出请求,检查客户端的 IP 地址是否已列出,然后发送响应。响应是状态码 200、302,正文中还有“阻止”或“允许”。根据状态码,设备执行策略评估。如果策略评估为真,则立即触发分配操作,操作会将值设置为变量。设备使用并设置此变量值,以便在同一模块中进行后续策略评估。
配置分配操作的用例
按照以下步骤配置分配操作并为后续策略使用变量:
-
访问决策由单独的 Web 服务提供,该请求返回正文中带有 BLOCK 或 ALLOW 的响应。
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.