可以通过策略对网络层安全性、HTTP 安全性、HTTP 请求和 HTTP 响应进行高级自定义。可以使用策略控制安全性、客户端请求属性或服务器响应属性。策略由匹配和操作组成,类似于 if-then 逻辑。如果逻辑计算结果为 true,则它与策略匹配,因此,NSX Advanced Load Balancer 执行相应的操作。
策略由一个或多个规则组成,这些规则是匹配-操作对。一个规则可以包含很多匹配,或具有很多操作。可以为一个虚拟服务配置多个策略。策略可以改变虚拟服务的默认行为;或者,如果不满足匹配条件,则不会对特定连接、请求或响应进行任何更改。
不会共享策略。它们是针对每个虚拟服务定义的,旨在作为简单的点击功能。
有关更多高级功能,请参见《VMware NSX Advanced Load Balancer DataScript 指南》。
策略是在虚拟服务编辑器的策略选项卡中配置的。
设置策略的优先级
可以使用策略重新创建 NSX Advanced Load Balancer 上的其他位置中的类似功能。例如,可以配置策略以生成从 HTTP 到 HTTPS 的 HTTP 重定向。可以在 Secure-HTTP 应用程序配置文件中配置相同的功能。由于策略比通用配置文件更具体,因此,优先使用策略。
如果配置文件设置为通过端口 443 将 HTTP 重定向到 HTTPS,并且策略设置为在端口 8443 上将 HTTP 重定向到 HTTPS,客户端将发送到端口 8443。(有关更多信息,请参见《VMware NSX Advanced Load Balancer DataScript 指南》中的执行优先级。)
虚拟服务可以定义多个策略,4 种类型各一个策略。在定义后,这 4 种类型的策略按以下优先顺序进行实施:
网络安全策略。
HTTP 安全策略。
HTTP 请求策略。
HTTP 响应策略。
DataScript 策略。
访问策略。
例如,设置为丢弃流量的网络策略优先于设置为修改标头的 HTTP 请求策略。由于丢弃了连接,将不会执行 HTTP 请求策略。每种策略类型可以包含多个规则,可以设置这些规则的优先级以按指定的顺序进行处理。可以在 NSX Advanced Load Balancer UI 上的有序列表中向上或向下移动策略以完成该操作。
匹配-操作
所有策略由匹配规则和操作规则组成,其概念类似于 if-then 逻辑。管理员为虚拟服务的所有连接、请求或响应设置匹配条件。NSX Advanced Load Balancer 为满足匹配条件的所有流量执行配置的操作。
具有多个条目的单个匹配被视为“或”操作。例如,如果单个匹配类型设置了“marketing”、“sales”和“engineering”条件,并且路径包含“marketing”、“sales”或“engineering”,则匹配为 true。
如果规则配置了多个匹配,所有匹配类型必须都为 true 才能执行操作。在上面的屏幕截图中,路径和 HTTP 方法匹配都必须为 true。对于这两种匹配类型中的每一种类型,只要有一个条目为 true,该匹配类型就会为 true。对于 HTTP 方法,客户端请求的类型必须为 GET
或 HEAD
。可以为每个策略配置多个规则,并且这些规则可以配置为按特定的顺序执行。如果未应用匹配,则自动满足条件,并根据策略类型为每个连接执行操作。
针对 HTTP 内容的匹配不区分大小写。这适用于标头名称和值、Cookie、主机名、路径和查询。对于 HTTP 策略,NSX Advanced Load Balancer 将统一资源标识符 (Uniform Resource Identifier, URI) 匹配项与解码的 HTTP URI 进行比较。很多浏览器和 Web 服务器以不同方式对用户可读格式内容进行编码。例如,浏览器的 URI 编码可能会将美元字符“$”转换为“%24”。在根据匹配条件进行计算之前,服务引擎 (SE) 将“%24”转换回“$”。
创建策略
虚拟服务编辑器定义由一个或多个规则组成的策略,这些规则控制通过虚拟服务的请求流。
以下是创建策略的步骤:
策略类型:先选择以下类别之一以选择要添加的策略类型:
HTTP 安全:HTTP 安全策略执行定义的操作,例如允许/拒绝、重定向到 HTTPS 或使用静态页面进行响应。
网络安全:它配置为明确允许或阻止网络中用户定义的类型的流量。
HTTP 请求:HTTP 请求策略允许处理 HTTP 请求和内容切换,并且还允许基于客户端 HTTP 请求的自定义操作。
HTTP 响应:HTTP 响应策略评估来自服务器的响应,并且可用于修改服务器的响应标头。HTTP 响应策略经常与 HTTP 请求策略一起使用,以提供在客户端和服务器之间重写网站名称的
Apache Mod_ProxyPass
功能。DataScript:在数据平面流量触发各种事件时,将执行 DataScript。
访问:可以为 SAML 或 Ping 访问提供访问策略。
创建规则:单击加号图标以创建新的规则,并为新规则指定以下信息:
启用或禁用:默认情况下,将启用新规则。可以切换绿色滑块图标以更改为灰色,从而停用规则并使其对流量无效。
规则名称:在规则名称字段中为规则指定唯一的名称,或者保留系统生成的默认名称。
日志记录:如果要为该规则启用日志记录,请选择日志记录。如果启用,将为与规则匹配条件匹配的任何连接或请求生成日志。如果虚拟服务已设置为记录所有连接或请求,该选项不会创建重复的日志。客户端日志标有匹配的策略类型和规则名称条目。在虚拟服务的“日志”选项卡中查看策略的日志时,这些日志是“重要日志”选项的一部分,除非特定连接或请求是非错误流量,在这种情况下,可以在默认非重要日志筛选器下面显示该日志。
匹配:使用添加新匹配项下拉菜单添加一个或多个匹配项。根据要创建的策略类型定义的上下文,匹配选项将有所不同。如果没有为规则显示匹配项,则将所有连接或请求视为 true 或匹配。
操作:在下拉菜单中添加匹配为 true 时执行的一个或多个操作。根据要创建的规则类型,可用的选项将有所不同。
保存规则:单击保存规则按钮以保存新规则。
排序:规则按照在列表中出现的顺序执行。例如,如果您添加一个规则以关闭基于客户端 IP 地址的连接,然后添加一个规则以将 HTTP 请求从该 IP 地址重定向到安全 HTTP (HTTPS) 连接,则 NSX Advanced Load Balancer 关闭该连接而不转发请求。可以单击上箭头和下箭头图标以更改规则的应用顺序,直到规则处于所需的顺序。
网络安全
下表列出了可用的网络安全匹配条件以及在匹配时可以执行的可配置操作。
NSX Advanced Load Balancer 中的 IPv6 支持该功能。
匹配 |
客户端 IP:客户端 IP 地址或一组客户端地址。
|
服务端口:虚拟服务侦听的端口。 |
|
IP 信誉:IP 信誉服务,可以根据与 IP 地址关联的威胁对 IP 地址进行标识或分类。 |
|
操作 |
日志记录:选择该选项将导致 NSX Advanced Load Balancer 在调用操作时进行记录。 |
允许或拒绝:明确允许或拒绝任何匹配的流量。将为拒绝的流量执行重置 (RST),除非系统受到容量攻击或拒绝服务攻击,在这种情况下,可能会以静默方式丢弃连接。 |
|
速率限制:限制客户端打开的连接数超过最大速率字段中指定的每秒连接数。超过此数值的客户端将以静默方式丢弃其过多的连接尝试。如果启用了突发大小,并且客户端最近没有打开连接,则它们可以突发到最大速率以上。此功能可应用于 TCP 或 UDP。与“匹配条件”匹配的所有客户端都将被视为一个存储桶。例如,如果未定义任何匹配,则任何和所有 IP 地址将增加最大速率计数器。将对所有新连接的客户端进行限制。要启用每个客户端的限制,请参见虚拟服务的高级选项卡。该页面的手册还包含更详细的连接限制说明。 |
HTTP 安全策略
下表列出了可用的 HTTP 安全匹配条件以及在匹配时可以执行的可配置操作。
匹配 |
客户端 IP:客户端 IP 地址或一组客户端地址。
|
服务端口:虚拟服务侦听的端口。 在 SNI 虚拟托管和增强虚拟托管中,对于子虚拟服务中的策略,服务匹配条件与其父虚拟服务进行匹配。 |
|
协议类型:HTTP 或 HTTPS。 示例:https://www.avinetworks.com/marketing/index.html?a=1&b=2 |
|
HTTP 方法:客户端请求使用的方法。如果管理员指定的任一方法为 true,则匹配为 true。 可用的选项包括 GET、HEAD、POST、PUT、DELETE、OPTIONS、TRACE、CONNECT、PATCH、PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、LOCK 和 UNLOCK。 |
|
HTTP 版本:如果客户端版本为 0.9、1.0 或 1.1,则为 True。 |
|
路径:一个或一组路径。路径不需要以正斜杠 (/) 开头。为了进行比较,NSX Advanced Load Balancer 自动忽略匹配字段中指定的任何初始斜杠。 示例:https://www.avinetworks.com/marketing/index.html?a=1&b=2 |
|
查询:一个或一组查询。不要将前导“?”或“&”字符添加到匹配中。 示例:https://www.avinetworks.com/marketing/index.html?a=1&b=2 |
|
标头:如果标头存在,或者标头存在并包含指定的值,则为 True |
|
Cookie:如果 Cookie 存在,或者 Cookie 存在并包含指定的值,则为 True |
|
主机标头:请求的主机标头。 示例:https://www.avinetworks.com/marketing/index.html?a=1&b=2 |
|
操作 |
日志记录:选择该选项将导致 NSX Advanced Load Balancer 在调用操作时进行记录。 |
允许:允许匹配的请求执行进一步的策略或发送到目标池服务器。 |
|
关闭连接:匹配的请求导致 NSX Advanced Load Balancer 关闭通过 FIN 收到请求的 TCP 连接。很多浏览器打开多个连接,除非通过这些连接发送的请求也触发关闭连接操作,否则,不会关闭这些连接。 |
|
重定向到 HTTPS:使用到所需 SSL 端口的临时重定向响应请求。 |
|
发送响应:NSX Advanced Load Balancer 可以使用 HTTP 状态代码 200(成功)、403(未授权)或 404(找不到文件)提供 HTTP 响应。浏览器为其中的每个状态代码呈现一个默认页面。不过,您也可以上载自定义 HTML 文件。该文件可以包含图像或其他文件的链接,但仅存储初始 HTML 文件并通过“发送响应”提供该文件。
注:
您可以上载任何类型的文件以作为本地响应。建议使用 UI 配置一个本地文件。要使用 API 更新该本地文件,请以带外方式对 Base64 文件进行编码,并在 API 中使用编码的格式。 |
|
速率限制:指定新连接、HTTP 请求、带宽(以 Mbps 为单位)和/或客户端的并发打开连接的最大数量。 |
在 NSX Advanced Load Balancer UI 上提供了 HTTP 安全策略选项。要创建或编辑现有的 HTTP 安全策略,请导航到 ,选择所需的虚拟服务,然后选择 HTTP 安全选项。
HTTP 请求
HTTP 请求策略允许处理 HTTP 请求。可以在转发到服务器之前修改这些请求,将这些请求作为内容切换的基础,或者丢弃这些请求。HTTP 请求策略只能应用于配置了 HTTP 配置文件的第 7 层虚拟服务。下表列出了 HTTP 请求中提供的匹配条件,并且还列出了可以配置为在匹配时执行的操作。
NSX Advanced Load Balancer 中的 IPv6 支持该功能。
HTTP 请求策略
匹配 |
客户端 IP:客户端 IP 地址或一组客户端地址。 使用“-”指定范围:10.0.0.0-10.1.255.255 使用“/”指定网络掩码:10.0.0.0/24 使用预定义的 IP 组,该组可以基于地理位置。
注:
也可以使用 IPv6 地址格式的客户端 IP 地址。 |
服务端口:虚拟服务侦听的端口。 |
|
协议类型:HTTP 或 HTTPS。 示例:https://www.avinetworks.com/marketing/index.html?a=1&b=2 |
|
HTTP 方法:客户端请求使用的方法。如果管理员指定的任一方法为 true,则匹配为 true。 可用的选项包括 GET、HEAD、POST、PUT、DELETE、OPTIONS、TRACE 和 CONNECT。您也可以从其他选项中进行选择:PATCH、PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、LOCK 和 UNLOCK。 |
|
HTTP 版本:如果客户端版本为 0.9、1.0 或 1.1,则为 True。 |
|
路径:一个或一组路径。根据 RFC 3986,路径为空或以正斜杠开头。对于 HTTP 请求匹配策略中的 beginswith 和 equals 匹配运算符,匹配字符串需要以正斜杠开头才能匹配成功。 示例:在 https://www.avinetworks.com/marketing/index.html?a=1&b=2 中,路径为 /marketing/index.html。 |
|
查询:一个或一组查询。不要将前导“?”或“&”字符添加到匹配中。 示例:https://www.avinetworks.com/marketing/index.html?a=1&b=2 |
|
标头:如果标头存在,或者标头存在并包含指定的值,则为 True。 |
|
Cookie:如果 Cookie 存在,或者 Cookie 存在并包含指定的值,则为 True。 |
|
主机标头:请求的主机标头。 示例:https://www.avinetworks.com/marketing/index.html?a=1&b=2 |
|
操作 |
重定向 URL:将客户端重定向到不同的协议、端口、主机或路径。默认情况下,不会更改主机、路径和查询,除非管理员填充这些字段。路径字段不需要使用前导“/”斜杠字符。要创建简单的 HTTP 到 HTTPS 重定向,只需将协议设置为 HTTPS 即可。
注:
重定向操作不能与其他操作叠加在一起。 |
修改标头:允许添加、替换或移除 HTTP 标头或 Cookie。在“修改标头”操作中添加了
注:
敏感? 字段以屏蔽任何敏感的自定义值。 |
|
重写 URL:与 ProxyPass 功能类似,该操作允许将客户端请求的 URL 重写为服务器能够理解的 URL。例如,客户端应使用 www.avinetworks.com/sales,而服务器可以配置为 sales.avinetworks.com。路径字段不需要使用前导“/”斜杠字符。 |
|
内容切换:将匹配的请求转发到池或该池的特定服务器。或者,NSX Advanced Load Balancer 也可以使用 HTTP 状态代码 200(成功)、403(未授权)、404(找不到文件)或 429(请求太多)提供 HTTP 响应。将为其中的每个状态代码发送一个默认页面,也可以上载一个自定义 html 文件。
注:
您可以上载任何类型的文件以作为本地响应。建议使用 UI 配置一个本地文件。要使用 API 更新该本地文件,请以带外方式对 Base64 文件进行编码,并在 API 中使用编码的格式。 |
敏感
敏感选项用于屏蔽“修改标头”中的自定义值。敏感字段添加到修改标头操作中,以添加任何敏感的自定义值。
敏感字段(“敏感”)是 HTTP 标头值中的一个标记,用于确定是否必须将自定义值标记为敏感。如果您选中敏感字段,则会屏蔽 HTTP 策略集操作中的修改标头选项的自定义值。在下面的屏幕截图中显示了一个示例:
敏感是一个不可变字段,只能在创建 HTTP 策略期间设置或取消设置该字段。
由于屏蔽了标头值,管理员可能很难更新现有的标头。为了简化这一点,NSX Advanced Load Balancer 分配一个索引,即分配一个整数值以唯一地标识所有标头,如上面的屏幕截图所示。这有助于消除歧义。索引是由 NSX Advanced Load Balancer 自动分配的。如果要求更改索引,可以使用 CLI 或 API 完成该操作,并且您需要确保索引应该是唯一的值。
用于为 HTTP 策略中的自定义值设置敏感字段的 CLI 如下所示:
+------------------------+----------------------------------------------------+ | Field | Value | +------------------------+----------------------------------------------------+ | uuid | httppolicyset-14be5dde-8ff2-4891-a930-a81b6f547d9b | | name | test-HTTPPolicySet-0 | | http_request_policy | | | rules[1] | | | name | Rule 1 | | index | 1 | | enable | True | | match | | | vs_port | | | match_criteria | IS_IN | | ports[1] | 80 | | hdr_action[1] | | | action | HTTP_ADD_HDR | | hdr | | | name | pqr | | value | | | val | <sensitive> | | is_sensitive | True | | hdr_index | 1 | | is_internal_policy | False | | tenant_ref | admin | +------------------------+----------------------------------------------------+
HTTP 策略查询匹配
在 HTTP 策略中,可以匹配的参数之一是 URI 中的查询字符串。查询匹配在以下方面与其他匹配目标类似:
它用于将查询字符串与自定义字符串或字符串组列表进行匹配。
它用于通过“保留查询”控制项将查询字符串复制到操作规则(“重定向”或“重写 URL”操作)。
添加匹配条件
以下是查询匹配支持的匹配操作:
匹配操作 |
描述 |
---|---|
QUERY_MATCH_CONTAINS |
查询字符串包含配置的值 |
QUERY_MATCH_DOES_NOT_CONTAIN |
查询字符串不包含配置的值 |
QUERY_MATCH_EXISTS |
检查查询字符串在 URI 中是否存在 |
QUERY_MATCH_DOES_NOT_EXIST |
检查查询字符串是否不存在(或为空) |
QUERY_MATCH_BEGINS_WITH |
查询字符串以配置的值开头 |
QUERY_MATCH_DOES_NOT_BEGIN_WITH |
查询字符串不以配置的值开头 |
QUERY_MATCH_ENDS_WITH |
查询字符串以配置的值结尾 |
QUERY_MATCH_DOES_NOT_END_WITH |
查询字符串不以配置的值结尾 |
QUERY_MATCH_EQUALS |
查询字符串等于配置的值 |
QUERY_MATCH_DOES_NOT_EQUAL |
查询字符串不等于配置的值 |
QUERY_MATCH_REGEX_MATCH |
查询字符串与配置的正则表达式匹配 |
QUERY_MATCH_REGEX_DOES_NOT_MATCH |
查询字符串与配置的正则表达式不匹配 |
正则表达式匹配仅使用字符串组。
正则表达式匹配最多可以具有 10 个捕获组。
匹配编码的字符串
NSX Advanced Load Balancer 支持 Query_Match 的 Match Decoded String 选项(与以前支持的路径匹配一样)。该选项允许用户指定是与编码 (UTF-8) 还是解码的查询字符串匹配。默认情况下,将选择该选项。
示例 1:
如果未标记 Match_decoded 并发送 URI /hello/test?efg=%21efg,规则将匹配;如果发送 URI /hello/test?efg=!efg,规则将不匹配。
示例 2:
如果为字符串 hello/test?efg=!efg 或 hello/test?efg=%21efg 标记了 Match_decoded,则两者都会匹配,因为在这两种情况下字符串将转换为 hello/test?efg=!efg。
HTTP 请求排队
通过使用 HTTP 请求排队,NSX Advanced Load Balancer 可以在后端服务器达到允许的最大并发连接数后将收到的请求排入队列。通过将 HTTP 请求排入队列,可以留出时间等待新连接在服务器上变得可用,而不会执行配置的池关闭操作。
默认情况下,将禁用 HTTP 请求排队。可以针对每个池启用该功能。如果启用了该功能,默认队列长度为 128 个请求。可以配置队列长度,从 1 到任何所需的数量。唯一的限制是,必须在 SE 上具有可用内存。
如何管理队列
排队的请求按照后进先出 (LIFO) 方式进行管理。例如,如果队列长度为 128,则 NSX Advanced Load Balancer 最多可以为饱和服务器排队 128 个请求。只能将 GET 请求排入队列。不会将 PUT 请求排入队列。在服务器无法接受新请求时,NSX Advanced Load Balancer 将新请求排入队列,最多为队列可以容纳的最大请求数,即队列长度。如果队列已满,并且服务器仍然无法接受新请求,则会绕过队列,并且 NSX Advanced Load Balancer 开始将配置的池关闭操作应用于新请求。
当服务器再次能够接受新请求时,优先处理新请求。新请求的优先级高于排队的请求,并将新请求先发送到服务器。只有在没有可发送到服务器的新请求时,SE 才会从其队列中发送请求,从最近的请求(即最后一个排队的请求)开始。发送最近排队的请求(而不是队列中的最早请求)有助于最大限度降低对最终用户的影响,因为某些较新的请求可能是重新发送的旧请求,或者客户端可能已结束无响应的会话。如果由于服务器已满而向队列发送请求,并不会生成失败事件。如果队列也已满,则会生成一个事件。
对持久性的影响
可以将 HTTP 请求排队与持久性一起使用。如果启用了这两个功能,持久性要求保持连接到特定的服务器,并且该服务器已满,则将该连接的请求排入队列,直到所需的服务器具有可用的连接。请求不会发送到另一个服务器。在队列中,请求仍按照后进先出的方式进行管理,如上所述。
对 HTTP 缓存的影响
如果启用了 HTTP 缓存,并且 NSX Advanced Load Balancer 收到缓存中的对象的请求,则 NSX Advanced Load Balancer 从缓存中发送该对象以完成请求,而不是从服务器中请求该对象。在这种情况下,即使任何服务器都没有空闲连接以接收请求,也不需要将请求排入队列。
队列大小建议
SE 必须具有足够的内存以支持配置的 HTTP 队列大小。
对于平均请求大小(每个请求 2 KB),将队列长度设置为 128 需要 256 KB 内存。对于更大的队列大小,必须为 SE 分配相应的内存量。
更改队列长度的影响
如果更改了队列长度,更改将立即生效。
如果增加队列长度,则可以在服务器饱和时将更多请求排入队列。
如果减少队列长度,并且新的大小小于当前位于队列中的请求数,则 NSX Advanced Load Balancer 立即从队列中丢弃额外的请求,从最早的请求(第一个排队的请求)开始。例如,如果队列长度为 128 并且队列已满,队列长度减少到 64 将导致立即从队列中丢弃 64 个最早的请求。
配置 HTTP 请求排队
要为池启用请求排队,请执行以下操作:
导航到
。单击创建以创建新的池,或者单击池名称旁边的编辑图标。
转到高级选项卡。如果创建新的池,请输入名称,然后单击两次下一步。
在池满设置部分中,选择“请求排队”旁边的“已启用”。
要更改队列大小,请编辑队列长度字段中的数字。没有具体的最大长度值。在这种情况下,实际限制是由 SE 上可用于排队的内存量决定的。
如果要配置新的池,请完成配置任何其他池设置的过程,然后单击保存。
HTTP 响应策略
HTTP 响应策略评估来自服务器的响应,并且可用于修改服务器的响应标头。这些策略通常用于重写重定向或与 HTTP 请求策略结合使用,以提供类似于 Apache ProxyPass 的客户端到服务器名称重写功能。
如果目的是创建从内部到外部的主机名映射,请考虑在虚拟服务的高级部分中使用更简单的主机名转换功能。在 HTTP 响应匹配期间,将根据原始客户端请求评估基于客户端数据的匹配条件。例如,如果客户端请求 /fruit.htm,并且请求策略将路径修改为 /cheese.htm,则路径的响应匹配规则与从客户端发送的未修改原始路径(即 /fruit.htm)进行比较。下表列出了 HTTP 响应中提供的匹配条件,并且还列出了可以配置为在匹配时执行的操作。
匹配 |
客户端 IP:客户端 IP 地址或一组客户端地址。 使用“-”指定范围:10.0.0.0-10.1.255.255 使用“/”指定网络掩码:10.0.0.0/24 使用预定义的 IP 组,该组可以基于地理位置。 |
服务端口:虚拟服务侦听的端口。 |
|
协议类型:HTTP 或 HTTPS。 示例:https://www.avinetworks.com/marketing/index.html?a=1&b=2 |
|
HTTP 方法:客户端请求使用的方法。如果管理员指定的任一方法为 true,则匹配为 true。 |
|
HTTP 版本:如果客户端版本为 0.9、1.0 或 1.1,则为 True。 |
|
路径:一个或一组路径。路径以“/”开头。示例:https://www.avinetworks.com/marketing/index.html?a=1&b=2 |
|
查询:一个或一组查询。不要将前导“?”或“&”字符添加到匹配中。 示例:https://www.avinetworks.com/marketing/index.html?a=1&b=2 |
|
标头:如果标头存在,或者标头存在并包含指定的值,则为 True。 |
|
Cookie:如果 Cookie 存在,或者 Cookie 存在并等于指定的值,则为 True。 |
|
主机标头:请求的主机标头。示例:https://www.avinetworks.com/marketing/index.html?a=1&b=2 |
|
位置标头:并非每个网站都存在位置标头。 |
|
HTTP 状态:响应的状态,例如 200(成功)、404(找不到文件)或类似状态。这些状态可能以逗号分隔,也可能是一个范围。例如:301, 302, 307, 308, 300-599。 |
|
响应标头:根据服务器发送的特定头进行匹配。 |
|
操作 |
日志记录:选中“日志记录”复选框将导致 Vantage 在调用操作时进行记录。 |
修改标头:允许添加、替换或移除 HTTP 标头或 Cookie。 |
|
重写位置标头:更改位置标头。对于在内部和外部名称之间进行代理非常有用,例如 www.avinetworks.com/sales 到 sales.avinetworks.com/。 |
DataScript
在数据平面流量触发各种事件时,将执行 DataScript。单个规则可以在不同事件期间执行不同的代码。
有关更多详细信息,请参见《VMware NSX Advanced Load Balancer DataScript 指南》中的 DataScript 事件。
访问权限
可以为 SAML、PingAccess、JWT 或 LDAP 访问提供访问策略。
SAML
如果您选择 SAML 选项,请指定以下详细信息:
SSO 策略:指定附加到虚拟服务的 SSO 策略。
实体 ID:指定该节点的 SAML 实体 ID。
SSO URL:指定要在 IDP 上编写的 SAML 单点登录 URL。
会话 Cookie 名称:指定经过身份验证的会话的 HTTP Cookie 名称。
会话 Cookie 超时:指定 Cookie 超时(以分钟为单位)。
SSL 密钥:从下拉菜单中选择 SSL 密钥。
PingAccess
如果您选择 PingAccess 选项,请指定以下详细信息:
SSO 策略:指定附加到虚拟服务的 SSO 策略。
单击创建 SSO 策略按钮以创建 SSO 策略。指定以下详细信息:
名称 - 指定 SSO 策略的名称。
类型 - 从下拉列表中选择 SSO 策略类型。以下是下拉列表中提供的选项。
JWT
LDAP
OAuth/OIDC
PingAccess
SAML
默认身份验证配置文件:指定用于验证用户的身份验证配置文件。
身份验证规则:单击添加按钮以添加身份验证详细信息。
JWT
如果您选择 JWT 选项,请指定以下详细信息:
SSO 策略:选择附加到虚拟服务的 SSO 策略。
受众:指定唯一的受众以标识资源服务器。
令牌位置:选择授权标头或 URL 查询以作为令牌位置。
LDAP
如果您选择 LDAP 选项,请指定以下详细信息:
SSO 策略:指定附加到虚拟服务的 SSO 策略。
基本领域:在向客户端发出身份验证请求时,基本领域向客户端指示它们访问哪个领域。
每个服务器的连接数:指定单个基本身份验证 LDAP 进程到 LDAP 服务器的并发连接数。
缓存大小:指定数据平面上使用的 LDAP 基本身份验证凭据缓存大小。
绑定超时:指定在到 LDAP 服务器的连接上实施的 LDAP 基本身份验证默认绑定超时。
请求超时:指定在到 LDAP 服务器的连接上实施的 LDAP 基本身份验证默认登录或组搜索请求超时。
连接超时:指定在到 LDAP 服务器的连接上实施的 LDAP 基本身份验证默认连接超时。
重新连接超时:指定在到 LDAP 服务器的连接上实施的 LDAP 基本身份验证默认重新连接超时。
仅在故障切换时的服务器数:选中该框以表示 LDAP 基本身份验证仅在发生故障切换时使用多个 LDAP 服务器。
在指定所需的所有详细信息后,单击保存按钮。
策略标记
在更复杂的场景中,管理员可以从一个位置中捕获数据并将其应用于另一位置。NSX Advanced Load Balancer 支持使用变量和标记,可以将它们用于该目的。
变量可用于将动态数据插入到 HTTP 请求策略和 HTTP 响应策略的修改标头操作中。支持两个变量,即 $client_ip
和 $vs_port
。例如,可以将名为 origin_ip
的新标头添加到 HTTP 请求并将值设置为 $client_ip
,以便插入客户端源地址以作为标头值。
标记可用于查找 HTTP 主机名或路径的特定部分以及对其进行重新排序。例如,可以将原始请求 http://support.avinetworks.com/docs/index.htm 重写为 http://www.avinetworks.com/support/docs/index.htm。标记可用于 HTTP 主机和 HTTP 路径。标记源自原始 URL。主机标头中的标记分隔符是“.”,URL 路径中的标记分隔符是“/”。
示例 1
原始请求 URL: |
support |
avinetworks |
com |
docs |
index.htm |
标记: |
host[0] |
host[1] |
host[2] |
path[0] |
path[1] |
除了使用 host[0]、host[1] 和 host[2] 约定以外,还可以使用冒号以表示系统是否必须执行到主机或路径末尾。例如,host[1:] 意味着使用 avinetworks,后跟任何其他主机字段。结果是 avinetworks.com。在可能包含多个级别的路径中,这是特别有用的。标记还可以指定一个范围,例如 path[2:5]。主机和路径标记还可以缩写为“h”和“p”,例如,h[1:] 和 p[2]。
在“重写 URL”、“重定向”和“重写位置标头”操作中,可以根据标记指定 URL 的主机部分,标记可以是常量字符串或来自 URL 的现有主机和路径部分的标记。
示例 2
新 URL:region.avinetworks.com/france/paris/index.htm
请求 URL |
paris |
france |
avinetworks |
com |
region |
index.htm |
标记: |
host[0] |
host[1] |
host[2] |
host[3] |
path[0] |
path[1] |
新主机: |
path[0].host[2:] |
|||||
新路径: |
/host[1]/host[0]/path[1] |
示例 3
请求 URL |
www1 |
avinetworks |
com |
sales |
foo |
index.htm |
auth=true |
标记: |
host[0] |
host[1] |
host[2] |
path[0] |
path[1] |
path[2] |
(query) |
新主机: |
www.host[1:] |
||||||
新路径: |
/host[0]/path[0:] |
||||||
查询: |
已启用“保留查询” |
||||||
新 URL: |
www.avi.com/www1/sales/foo/index.htm?auth=true |
如果主机标头包含 IPv4 地址而不是 FQDN,并且重写 URL 或重定向操作引用主机标记(例如 host[0]、host[1,2] 等),则会跳过规则操作并计算下一个规则。
如果主机标头或路径包含的标记少于操作中引用的标记,则会跳过规则操作。例如,如果主机标头中的主机名只有三个标记(主机名 www.avinetworks.com,其中具有以下标记:host[0] = www、host1 = avinetworks、host2 = com)。如果操作引用 host[4],则会跳过规则操作。
如果 HTTP 响应中的位置标头包含 IPv4 地址,并且响应策略操作是重写引用主机标记的位置标头,则会跳过规则操作。
规则引擎无法识别主机地址中的八进制或十六进制 IPv4 地址。也就是说,如果主机标头具有八进制/十六进制 IPv4 地址,并且规则操作引用主机标记(例如 host1 等),则不会跳过该操作。
如果收到的 HTTP 请求具有多个主机标头,将使用第一个主机标头。
根据 RFC,HTTP 1.1 请求必须具有非空主机标头。在遇到空标头时,NSX Advanced Load Balancer 返回 HTTP 响应 400“错误的请求”。
HTTP 处理是针对解码的 URI 执行的。
策略中的正则表达式匹配
NSX Advanced Load Balancer 支持将正则表达式捕获作为可以在策略操作中使用的标记。这些正则表达式捕获是从正则表达式模式字符串中获取的,这些字符串与策略上配置的匹配规则中的 URI 匹配。
以下是配置正则表达式匹配和标记的步骤:
使用要用于 URI 匹配的正则表达式模式列表创建一个字符串组对象。请注意,使用了生成正则表达式标记所需的正则表达式捕获(圆括号内的字符串模式)。
导航到创建。指定字符串名称和类型。
。单击
在“策略”下面,创建一个匹配规则,为条件字段选择正则表达式模式匹配,并附加所需的字符串组。
您现在可以在相应操作规则中将正则表达式捕获作为标记。在 GUI 上,您可以使用
SG_RE[]
访问这些标记。这些标记是从字符串组列表上与请求路径匹配的第一个字符串中获取的。可以使用
SG_RE_Q
在操作规则中访问查询字符串中的正则表达式捕获,以编制所需捕获组的索引。
示例
正则表达式字符串:^/hello/(.*)/world/(.*)$
请求路径:/hello/foo/world/bar
正则表达式 |
请求路径 |
标记 |
新路径 |
新路径 |
---|---|---|---|---|
^/hello/ |
/hello/ |
SG_RE[0]/SG_RE[1] / |
/foo/bar / |
|
(.*) |
/foo/ |
SG_RE[0] |
||
/world/ |
/world/ |
|||
(.*)$ |
bar |
SG_RE[1] |
注意事项和限制
正则表达式匹配仅使用字符串组。
正则表达式匹配最多可以具有 10 个捕获组。