ADC

使用高级策略绑定策略

定义策略后,可以通过将策略绑定到绑定点并指定优先级别来调用该策略。您只能将策略绑定到一个绑定点。绑定点可以是全局的(应用于所有已配置的虚拟服务器),也可以是特定的虚拟服务器(负载平衡或内容交换虚拟服务器)。

评估策略的顺序决定了策略的应用顺序。ADC 的功能通常按特定顺序评估各种策略库。但是,有时候,其他功能可能会影响评估顺序。在策略库中,评估顺序取决于策略中配置的参数值。如果评估的结果与正在处理的数据匹配,则大多数功能将应用与策略关联的所有操作。

注意:

集成缓存功能是例外。

策略绑定中特定功能的差异

您可以将策略绑定到内置的全局绑定点(或库)、特定虚拟服务器或策略标签。

但是,NetScaler 的功能在可用的绑定类型上有所不同。下表汇总了使用策略的 NetScaler 功能中的策略绑定。

功能名称 在功能中配置的虚拟服务器 在功能中配置的策略 为策略配置的绑定点 在功能中使用策略
DNS DNS 策略 全局 确定如何对请求执行 DNS 解析。
内容切换(注意:此功能可以支持高级策略,但不能同时支持两者。) 内容切换 (CS) 内容切换策略 内容切换或缓存重定向虚拟服务器;策略标签 根据传入请求的特征,确定哪个服务器或服务器组负责提供响应。请求特征包括设备类型、语言、Cookie、HTTP 方法、内容类型和关联的缓存服务器。
集成缓存 缓存策略 全局覆盖、全局默认值、策略标签、负载平衡、内容切换或 SSL 卸载虚拟服务器 确定 HTTP 响应是否可以存储在 NetScaler 设备的集成缓存中并从中提供服务。
响应方 响应者策略 全局覆盖、全局默认值、策略标签、负载平衡、内容切换或 SSL 卸载虚拟服务器 配置响应程序函数的行为。
重写 重写策略 全局覆盖、全局默认值、策略标签、负载平衡、内容切换或 SSL 卸载虚拟服务器 确定要在处理之前修改的 HTTP 数据。这些策略提供了修改数据的规则。例如,为了安全起见,您可以修改 HTTP 数据以根据传入请求的地址将请求重定向到选定的服务器,或者在响应中掩盖服务器信息。
重写功能中的 URL 转换函数 转型策略 全局覆盖、全局默认、策略标签 识别 HTTP 事务和文本文件中的 URL 以评估是否应更改 URL。
NetScaler Gateway(仅限无客户端 VPN 功能) VPN 服务器 无客户端访问策略 VPN 全局,VPN 服务器 确定 NetScaler Gateway 如何执行身份验证、授权、审计和其他功能,并使用 NetScaler Gateway 为常规 Web 访问定义重写规则。

绑定点和评估顺序

要使策略生效,您必须确保在处理过程中的某个时候调用该策略。为此,请将策略与绑定点关联。绑定到绑定点的策略集合称为策略库。

以下是 NetScaler 评估的绑定点,按策略库内的典型评估顺序列出

  1. 请求时间覆盖。当请求流经某个功能时,NetScaler 首先评估该功能的请求时间替代策略。
  2. 请求时间负载平衡虚拟服务器。如果在评估了所有请求时间替代策略后无法完成策略评估,NetScaler 将处理负载平衡虚拟服务器的请求时间策略。
  3. 请求时间内容切换虚拟服务器。如果在评估了负载平衡虚拟服务器的所有请求时间策略后无法完成策略评估,NetScaler 将处理内容交换虚拟服务器的请求时间策略。
  4. 请求时间默认。如果在评估了所有请求时间、虚拟服务器特定策略之后仍无法完成策略评估,则 NetScaler 将处理请求时间高级策略。
  5. 响应时间取代。在响应时,NetScaler 从绑定到响应时间覆盖绑定点的策略开始。
  6. 响应时间负载平衡虚拟服务器。如果在评估了所有响应时间替代策略后无法完成策略评估,则 NetScaler 会处理负载平衡虚拟服务器的响应时间策略。
  7. 响应时间内容切换虚拟服务器。如果在评估了负载平衡虚拟服务器的所有策略后仍无法完成策略评估,则 NetScaler 会处理内容交换虚拟服务器的响应时间策略。
  8. 默认响应时间。如果在评估了所有响应时间、特定于虚拟服务器的策略之后仍无法完成策略评估,则 NetScaler 将处理响应时间高级策略。

跨特征的策略评估

除了评估功能中的策略之外,如果将策略绑定到内容交换虚拟服务器,则必须先评估这些策略,然后再评估其他策略。在 NetScaler 版本 9.0.x 及更高版本中,将策略绑定到内容交换虚拟服务器会产生不同的结果。在 NetScaler 9.0 及更高版本中,评估方式如下:

  • 在其他策略之前评估内容切换策略。如果内容交换策略的评估结果为 TRUE,则选择目标负载平衡虚拟服务器。
  • 如果所有内容交换策略的评估均为 FALSE,则会选择内容交换 VIP 下的默认负载平衡虚拟服务器。

内容交换过程选择目标负载平衡虚拟服务器后,将按以下顺序评估策略:

  1. 绑定到全局覆盖绑定点的策略。
  2. 绑定到默认负载平衡虚拟服务器的策略。
  3. 绑定到目标内容交换虚拟服务器的策略。
  4. 绑定到全局默认绑定点的策略。

为确保按预期顺序评估策略,请遵循以下准则:

  • 确保无法从外部直接访问默认负载平衡虚拟服务器;例如,虚拟服务器 IP 地址可以是 0.0.0.0。
  • 为防止在负载平衡默认虚拟服务器上暴露内部数据,请将策略配置为以“503 服务不可用”状态进行响应,然后将其绑定到默认负载平衡虚拟服务器。

策略库的条目

策略库中的每个条目都至少有一个策略和一个优先级级别。您还可以配置更改基于优先级的评估顺序的条目,还可以配置调用外部策略库的条目。 策略库是绑定在特定绑定点并且可以评估某些流量的策略组。如果某些策略绑定到 HTTP 协议类型的 LB 虚拟服务器,那么 LB 虚拟服务器就是策略库。而且可以评估绑定到该策略库的策略以了解 HTTP 流量。如果某些重写策略必须在 DNS_REQ_OVERRIDE 绑定点上重写全局,那么 DNS_REQ_OVERRIDE bindpoit 将成为绑定某些策略的策略库。

因为,在策略标签中,我们可以绑定多个策略,因此策略标签也是策略库。

策略库根据协议、条件和优先级而有所区别。假设您有 2 个 LB 虚拟服务器。一种是 HTTP 类型,另一种是 DNS 类型。而且,不同的策略绑定到这些虚拟服务器。因此,两个虚拟服务器都是策略库,但是将对绑定到策略库之一的策略进行 HTTP 流量评估。对绑定到另一个策略库的策略进行评估是否有 DNS 流量。对于每个策略评估,都会对规则进行评估。对于 NOPOLICY 而言,也会评估规则为 true。 如果用户想为所有流量调用策略标签,则用户可以使用 NOPOLICY 作为规则为 true。

下表总结了策略库中的每个条目。

策略名称 优先级 Goto 表达式 调用类型 要调用的策略库
策略名称或“虚拟”策略。 整数。 可选。如果未配置,ADC 将采用默认的 gotoPriorityExpression 值。如果当前策略评估为 true,或者结束任何进一步评估,它会标识下一个要评估的策略 可选。表示已调用外部策略库。该字段将选择限制在全局策略标签或虚拟服务器上。 可选。与调用类型一起使用。这是策略库或虚拟服务器名称的标签。NetScaler 在处理外部存储库后返回到当前库。

如果策略的评估结果为 TRUE,NetScaler 将存储与策略关联的操作。添加根据 gotoPriorityExpression 字段值评估下一个策略。如果策略的评估结果为 FALSE,NetScaler 将评估下一个策略。如果策略既不是 TRUE 也不是 FALSE,NetScaler 将使用关联的 Uneff(未定义)操作。 调用类型指定策略库类型。该值可为以下类型之一:

  • 请求虚拟服务器:调用与虚拟服务器关联的请求时间策略。
  • 响应虚拟服务器:调用与虚拟服务器关联的响应时间策略。
  • 策略标签:调用另一个策略库,由该库的策略标签标识。 GotoPriorityExpression 字段值:
  • Goto NEXT - 转到下一个较高优先级的策略
  • 转到 END-结束评估
  • Goto #-生成待评估的下一个策略的优先级编号的表达式。Goto 只能在策略库中继续前进。
  • 转到 USE_INVOCATION_RESULT — 如果此策略调用另一个策略标签,则适用。如果被调用的策略标签中的最后一个转到的值为 END,则评估将停止。如果最后一个转到不是 END,则当前的策略标签将执行 NEXT。 如果省略 Goto 表达式,则与指定 END 相同。 使用 Goto 表达式的策略库示例:
策略名称 优先级 Goto 调用 要调用的策略库
ClientCertificatePolicy 100 300
SubnetPolicy 200 下一步
NOPOLICY 300 USE INVOCATION RESULT 请求服务器 My_Request_VServer
NOPOLICY 350 USE INVOCATION RESULT 策略标签 My_Policy_Label
WorkingHoursPolicy 400 END

策略库内的评估顺序

在策略库内,评估顺序取决于以下参数:

  • 一个优先事项。

    有关评估订单的最小数量的信息是数字优先级。数字越低,优先级越高。

  • Goto 表达式。

    如果提供,Goto 表达式表示下一个要评估的策略,通常在同一个策略库中。Goto 表达式只能在库继续前进。为了防止循环,如果 Goto 语句在策略中向后指向,策略库配置将无效。

  • 调用其他策略库。

    任何条目都可以调用外部策略库。NetScaler 提供了一个名为 NOPOLICY 的内置实体,它没有规则。当您想调用另一个策略库但不想在调用之前处理任何其他规则时,可以在策略库中添加 NOPOLICY 条目。可以在多个策略库中有多个 NOPOLICY 条目。

Goto 表达式的值如下:

  • NEXT。

    此关键字在当前策略库中选择具有下一个更高优先级级别的策略。

  • 整数。

    如果提供一个整数,它必须与当前策略库中另一个策略的优先级相匹配。

  • END。

    该关键字在处理当前策略后停止评估,并且该库中的其他策略不会被处理。

  • 空白。

    如果 Goto 表达式为空,则与指定 END 相同。

  • 数字表达式。

    这是一个高级的策略表达式,解析为当前库中的另一个策略的优先级编号。

  • USE_INVOCATION_RESULT。

    只有在调用外部策略库的情况下才能使用该短语。输入该短语会导致 NetScaler 执行以下操作之一:

    • 如果被调用的策略库中的最终 Goto 值为 END 或为空,则调用结果为 END,评估将停止。
    • 如果调用的策略库中的最后一个 Goto 表达式不是 END,则 NetScaler 会执行 NEXT。

下表说明了使用 Goto 语句和策略库调用的策略库。

| 策略名称 | 优先级 | Goto | 调用 | 要调用的策略库 |— | ——– | —- | —-| —- | | ClientCertificatePolicy(规则:请求是否包含客户端证书?)| 100 | 300 | 无 | 无 | | SubnetPolicy(规则:客户端是否来自专用子网?) | 200 | NEXT | 无 | 无 | NOPOLICY | 300 | USE INVOCATION RESULT | Request virtual server | My_Request_VServer | NOPOLICY | 350 | USE INVOCATION RESULT | Policy Label | My_Policy_Label | | WorkingHoursPolicy(规则:是工作时间吗?)| 400 | END | 无 | 无 |

表 3. 使用 Goto 和外部策略库的策略库示例

策略评估如何结束

当 NetScaler 设备运行以下步骤之一时,策略库的评估即告结束:

  • 如果策略评估为“TRUE”,它会调用外部策略库,其 Goto 语句值为“USE_INVOCATION_RESULT”,如果外部策略库中的另一个策略也评估为“TRUE”且 Goto 语句值为“END”,则从外部策略库返回后,不会进一步评估策略。

  • 调用外部策略库,其评估返回 END,Goto 语句使用 USE_INVOCATION_RESULT 或 END 的值。对此功能的下一个策略库继续进行评估。例如,如果当前库是请求时间覆盖库,NetScaler 接下来会评估虚拟服务器的请求时间策略库。

  • NetScaler已经浏览了该功能中的所有策略库,但尚未找到终点。

如果这是此策略库中要评估的最后一个条目,NetScaler 将继续使用下一个功能。

策略评估后功能如何使用操作

在评估特定数据点的所有相关策略(例如,HTTP 请求)后,NetScaler 会存储与任何与数据匹配的策略相关的所有操作。

对于大多数功能,匹配策略中的所有操作都将在流量包离开 NetScaler 时应用于该数据包。集成缓存功能只应用一个操作:CACHE 或 NOCACHE。此操作与“优先级最高”策略库中优先级最低的策略相关联(例如,request-time 覆盖策略在特定于虚拟服务器的策略之前应用)。

使用高级策略绑定策略