Citrix ADC

配置HTTP调出

在配置HTTP调出时,您可以指定请求的类型(HTTP或HTTPS)、目的地和请求的格式。期望的响应格式,最后是要分析的响应部分。

对于目的地,您可以指定HTTP调出代理的IP地址和端口。或者使用负载平衡、内容切换或缓存重定向虚拟服务器来管理HTTP调出请求。

在第一种情况下,HTTP调出请求被直接发送到HTTP调出代理。在第二种情况下,将HTTP调出请求发送到指定虚拟服务器的虚拟IP地址(VIP)。虚拟服务器处理请求的方式与处理客户机请求的方式相同。例如,如果希望生成许多调出,则可以在多个服务器上配置HTTP调出代理的实例,将这些实例(作为服务)绑定到负载平衡虚拟服务器,然后在HTTP调出配置中指定负载平衡虚拟服务器。负载平衡虚拟服务器然后根据负载平衡算法来平衡这些配置实例上的负载。

对于HTTP调出请求的格式,可以指定HTTP调出请求的各个属性(基于属性的HTTP调出),也可以将整个HTTP调出请求指定为高级策略表达式(基于表达式的HTTP调出)。

下表描述了HTTP调出策略中的元素:

有关更多信息,请参见policy-httpCallout

参数 描述
名字 标注名称,最大127个字符
IP地址和端口(IP -address /)港口)或虚拟服务器名称(vserver) 发送callout的服务器的IPv4或IPv6地址(或通配符)和发送callout的服务器的端口(或通配符)。或者服务类型为HTTP的负载均衡、内容交换或缓存重定向虚拟服务器的名称。
HTTP方法(httpMethod) HTTP方法(httpMethod)。方法在此调出发送的HTTP请求中使用。有效值:GET或POST。默认值:。
主机表达式(hostExpr) 主机表达式(hostexp)。用于配置Host头的高级文本表达式。最大长度:255。表达式可以是文字值,也可以是派生该值的高级表达式。示例:" 10.101.10.11 "," http.req.header("Host") "
URL字符串表达式(urlStemExpr) URL词干表达式(urlStemExpr)生成URL词干的高级字符串表达式。最大长度:8191。表达式可以是字面值字符串或派生值的表达式。示例:" "/mysite/index.html" " " http.req.url "
HTTP报头(Headers) HTTP报头(Headers)。高级文本表达式,用于在HTTP调出请求中插入HTTP标头及其值。为每个标头指定一个值。将头名称指定为字符串,并将头值指定为高级表达式。指定以空格分隔的标头。例如-headers cip(client.ip.src) hdr(http.req.header(" hdr "))。头的数量可以是8个
发送到服务器的基于表达式的请求(fullReqExpr) 确切的HTTP请求,Citrix ADC将作为高级表达式发送到8191个字符。如果指定此参数,则必须省略httpMethod、hostExpr、urlStemExpr、headers和parameters参数。请求表达式受使用标注的特性的约束。例如,HTTP。不能在请求时间策略库或TCP内容切换策略库中使用RES表达式。
发送到服务器的基于表达式的请求(bodyExpr) 用于生成请求主体的高级字符串表达式。表达式可以包含字面值字符串或派生值的表达式(例如,client.ip.src)。与-fullReqExpr互斥。
参数 高级表达式,用于在callout发送的HTTP请求中插入查询参数。为您配置的每个参数指定一个值。如果调出请求使用GET方法,则将这些参数插入到URL中。如果调出请求使用POST方法,则将这些参数插入到POST主体中。将查询参数名称配置为字符串,并将值配置为高级表达式。参数值为URL编码。指定以空格分隔的参数,如-parameters name1(" name1 ") name2(http.req.header(" hdr "))。最多可配置8个参数。
返回类型(返回类型) 目标应用程序在对调出的响应中返回的数据类型。TEXT:将返回值作为文本字符串处理。NUM:将返回值视为数字。BOOL:将返回值视为布尔值。注意:设置返回类型后,不能更改返回类型。
表达式,用于从响应中提取数据(resultExpr) 提取HTTP协议的高级表达式。从HTTP调出的响应中获取RES对象。最大长度为8191。此表达式中的操作必须匹配返回类型。例如,如果配置了文本的返回类型,则结果表达式必须是基于文本的表达式。如果返回类型为num,则结果表达式(resultExpr)必须返回类似如下的数值:" http.res.body(10000) "。注意:有时,如果您设置了TEXT返回类型,并且从服务器发送的结果超过16 KB,则结果表达式可能返回NULL。例如,当结果是一个超过16kb的连接字符串时。
计划 调出服务器的方案类型。例如:HTTP、https
cacheForSecs 持续时间,以秒为单位,在此期间缓存调出响应。缓存的响应存储在一个名为“calloutContentGroup”的集成缓存内容组中。如果没有配置持续时间,则不缓存调出响应,除非使用正常的缓存配置来缓存它们。此参数优先于应用于这些响应的任何正常缓存配置。

请注意设备不检查请求的有效性。您必须确保请求是有效的请求,并且不包含任何机密信息。不正确或不完整的HTTP调出配置会导致与操作无关的运行时UNDEF条件。UNDEF条件仅更新未定义命中计数器,这使您能够排除配置错误的HTTP调出。但是,该设备解析HTTP调出请求,使您能够为调出配置某些Citrix ADC特性。这可能导致HTTP调出调用自身。有关调出递归以及如何避免它的信息,请参见避免HTTP标注递归

最后,无论您是使用HTTP请求属性还是表达式来定义HTTP调出请求的格式,都必须指定来自HTTP调出代理的响应的格式以及您希望计算的响应部分。响应类型可以是布尔值、数字或文本。仅基于此返回类型,您可以在callout响应上使用其他表达式方法。如果返回类型是数字,则可以在调出响应上使用基于数字的表达式。要计算的响应部分由表达式指定。例如,如果您指定响应包含文本,则可以使用HTTP.RES.BODY(<单位>)指定设备必须只计算来自调出代理的响应的第一个字节。

在命令行,首先使用add命令创建一个HTTP调出。添加callout时,除HTTP方法为默认值GET外,其他参数均为默认值NONE。然后使用set命令配置callout的参数。set命令用于配置两种类型的标注(基于属性和基于表达式)。不同之处在于用于配置两种类型的标注的参数。因此,接下来的命令行指令包括用于配置基于属性的调出的set命令和用于配置基于表达式的调出的set命令。在配置实用程序中,所有这些配置任务都在单个对话框中执行。

注意:在将HTTP调出放入策略之前,可以修改除返回类型外的所有配置参数。一旦HTTP标注在策略中,就不能完全修改标注中配置的表达式。例如,您不能将HTTP.REQ.HEADER(" myval ")更改为CLIENT.IP.SRC。可以修改传递给表达式的操作符和参数。例如,您可以更改HTTP.REQ.HEADER(“myVal1”)HTTP.REQ.HEADER(“myVal2”),或HTTP.REQ.HEADER(“myVal”)HTTP.REQ.HEADER(“myVal”).AFTER_STR(<字符串>)。如果set命令失败,请创建HTTP callout。

HTTP调出配置包括配置高级策略表达式。有关配置高级策略表达式的详细信息,请参见配置高级策略表达式:入门的话题。

使用命令行接口配置HTTP调出

在命令提示符下,执行以下操作:

创建HTTP标注。

添加策略httpCallout  [-IPAddress ] [-port] [-vServer ] [-returnType ] [-httpMethod (GET | POST)] [-hostExpr ] [-urlStemExpr ] [-headers …[-parameters …][-bodyExpr ] [-fullReqExpr ] [-scheme (http | https)] [-resultExpr ] [-cacheForSecs ] [-comment ] 

例子

添加策略httpCallout mycallout -vserver lbv1 -returnType num -httpMethod GET -hostExpr 'http.req.header("Host")'-urlStemExpr 'http.req.header("Host")。url" -parameters Name("My Name") -headers Name("MyHeader")-resultExpr "http.res.body(10000)。长度“< !——NeedCopy >

修改HTTP callout配置。

设置策略httpCallout  [-IPAddress ] [-port ] [-vServer ] [-returnType ] [-httpMethod (GET | POST)] [-hostExpr ] [-urlStemExpr ] [-headers …][-parameters …][-resultExpr ] 

例子

>设置策略httpCallout mycallout -vserver lbv1 -returnType num -httpMethod GET -hostExpr 'http.req.header("Host")'-urlStemExpr "http.req. header("Host")。url" -parameters Name("My Name") -headers Name("MyHeader") -resultExpr "http.res.body(10000)。长度“< !——NeedCopy >

使用fullReqExpr参数配置HTTP callout。

设置策略httpCallout  [-vServer ] [-returnType ] [-fullReqExpr ] [-resultExpr ] 

例子

>设置策略httpCallout mycallout1 -vserver lbv1 -returnType num fullReqExpr q{"GET " + HTTP .req.url + "HTTP/" + HTTP .req.version.major + "."+ http.req.version.minor.sub(1) +“r \ nHost: 10.101.10.10 \ r \ nAccept: * / * \ r \ n \ r \ n”}< !——NeedCopy >

验证HTTP调出的配置。

show policy httpCallout '  ' sh policy httpCallout mycallout1 > name: mycallout1 >Vserver: lbv1 (UP)有效Vserver状态:UP返回类型:TEXT方案:HTTP Full REQ expr: "GET " + HTTP . REQ .url + "HTTP/" + HTTP . REQ .version.major + "."+ http.req.version.minor.sub(1)+ "r\nHost:10.101.10.10\r\nAccept: */*\r\n\r\n" Result expr: http.res.body(100) Hits: 0 Undef Hits: 0 Done > 

通过使用配置实用程序配置HTTP调出

  1. 导航到AppExpert>HTTP插图的编号
  2. 在详细信息窗格中,单击添加
  3. 创建HTTP Callout对话框中,配置HTTP callout的参数。若要查看参数的说明,请将鼠标悬停在复选框上。
  4. 点击创建然后点击关闭配置HTTP调出
配置HTTP调出