共用方式為

规则匹配条件

在 Azure Front Door 规则集中,规则由一个或多个匹配条件和动作组成。 本文详细介绍了可在 Azure Front Door 规则集中使用的匹配条件。

规则以一个匹配条件或一组匹配条件开始。 一条规则最多可有 10 个匹配条件。 匹配条件指定要对其执行所定义操作的特定请求类型。 如果你使用多个匹配条件,它们将使用 AND 逻辑组合在一起。 对于支持多个值的匹配条件,将使用 OR 逻辑。

使用匹配条件,可以进行以下筛选:

  • 基于特定的 IP 地址、端口或国家/地区来筛选请求。
  • 按标头信息筛选请求。
  • 筛选来自移动设备或桌面设备的请求。
  • 按请求文件名和文件扩展名筛选请求。
  • 按主机名、SSL 协议、请求 URL、协议、路径、查询字符串、发布参数和其他值筛选请求。

设备类型

使用 设备类型 匹配条件标识来自移动设备或桌面设备的请求。

属性

Property 支持值
Operator
  • 在 Azure 门户中:EqualNot Equal
  • 在 ARM 模板中:Equal;使用negateCondition属性指定“不等于
Value MobileDesktop

Example

在本示例中,我们将匹配所有被检测为来自移动设备的请求。

显示“设备类型”匹配条件的门户屏幕截图。

HTTP 版本

使用 HTTP 版本 匹配条件来标识使用特定版本的 HTTP 协议发出的请求。

Note

HTTP 版本匹配条件仅适用于 Azure Front Door 标准版/高级版。

属性

Property 支持值
Operator
  • 在 Azure 门户中:EqualNot Equal
  • 在 ARM 模板中:Equal;使用negateCondition属性指定“不等于
Value 2.01.11.00.9

Example

在本示例中,我们将匹配所有使用 HTTP 2.0 协议发送的请求。

显示 HTTP 版本匹配条件的门户屏幕截图。

请求 Cookie

使用 请求 Cookie 匹配条件来标识包含特定 Cookie 的请求。

Note

请求 Cookie 匹配条件仅适用于 Azure Front Door Standard/Premium。

属性

Property 支持值
Cookie 名称 一个表示 Cookie 名称的字符串值。
Operator 标准运算符列表中的任何运算符。
Value 一个或多个字符串或整数值,表示要匹配的请求头的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。
大小写转换 标准字符串转换列表中的任何转换。

Example

在本示例中,我们将匹配名为 deploymentStampId 且值为 1 的 Cookie 的所有请求。

显示请求 Cookie 匹配条件的门户屏幕截图。

Post args

使用 post args 匹配条件根据 POST 请求正文中提供的参数标识请求。 单个匹配条件匹配 POST 请求正文中的单个参数。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

Note

post args 匹配条件适用于application/x-www-form-urlencoded内容类型。

属性

Property 支持值
发布参数 一个表示 POST 参数名称的字符串值。
Operator 标准运算符列表中的任何运算符。
Value 一个或多个字符串或整数值,表示要匹配的 POST 参数的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。
大小写转换 标准字符串转换列表中的任何转换。

Example

在本示例中,我们将匹配所有 POST 请求,其中,customerName 参数是在请求正文中提供的,并且 customerName 值以字母 JK 开头。 我们使用大小写转换将输入值转换为大写,这样所有以 JjKk 开头的值都会匹配。

显示“post 参数”匹配条件的门户屏幕截图。

查询字符串

使用 查询字符串 匹配条件标识包含特定查询字符串的请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

Note

整个查询字符串是作为单个字符串匹配的,不包含前导 ?

属性

Property 支持值
Operator 支持标准运算符列表中的所有运算符。 但是,当与查询字符串匹配条件一起使用时,Any匹配条件会与每个请求匹配,而Not Any匹配条件则不会匹配任何请求。
查询字符串 一个或多个字符串或整数值,表示要匹配的查询字符串的值。 不要在查询字符串的开头加上 ?。 如果指定多个值,则使用 OR 逻辑对其进行评估。
大小写转换 标准字符串转换列表中的任何转换。

Example

在本示例中,我们将匹配查询字符串包含 language=en-US 字符串情况下的所有请求。 我们需要让匹配条件区分大小写,因此我们不转换大小写。

显示“查询字符串”匹配条件的门户屏幕截图。

远程地址

远程地址匹配条件根据请求者的位置或 IP 地址标识请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

  • 在指定 IP 地址块时使用 CIDR 表示法。 IP 地址块的语法为 IP 基址后跟正斜杠和前缀大小。 例如:
    • IPv4 示例5.5.5.64/26 匹配从地址 5.5.5.64 到 5.5.5.127 的任何请求。
    • IPv6 示例1:2:3:/48 匹配来自地址 1:2:3:0:0:0:0:0 到 1:2:3:ffff:ffff:ffff:ffff:ffff 的所有请求。
  • 当你指定多个 IP 地址和 IP 地址块时,将应用“OR”逻辑。
    • IPv4 示例:如果添加两个 IP 地址1.2.3.410.20.30.40,则来自地址 1.2.3.4 或 10.20.30.40 的任何请求都会匹配条件。
    • IPv6 示例:如果添加两个 IP 地址 1:2:3:4:5:6:7:8 ,则 10:20:30:40:50:60:70:80条件匹配来自地址 1:2:3:4:5:5:6:8 或 10:20:30:40:50:60:70:80 的任何请求。
  • 远程地址代表原始客户端 IP,该 IP 来自网络连接,或者如果用户在代理后面,通常为 X-Forwarded-For 请求头。 如果需要根据 TCP 请求的 IP 地址进行匹配,请使用 套接字地址 匹配条件(在标准/高级版中可用)。

属性

Property 支持值
Operator
  • 在 Azure 门户中:Geo MatchGeo Not MatchIP MatchIP Not Match
  • 在 ARM 模板中:GeoMatchIPMatch;使用 negateCondition 属性来指定 Geo Not Match或 IP Not Match
Value
  • 对于 IP MatchIP Not Match 运算符:指定一个或多个 IP 地址范围。 如果指定多个 IP 地址范围,则使用 OR 逻辑对其进行评估。
  • 对于 Geo MatchGeo Not Match 运算符:使用国家/地区代码指定一个或多个位置。

Example

在本示例中,我们将匹配不是源自美国的所有请求。

显示“远程地址”匹配条件的门户屏幕截图。

请求主体

请求正文匹配条件根据请求正文中显示的特定文本标识请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

Note

如果请求正文的大小超过 64KB,则请求 正文 匹配条件只考虑前 64KB。

属性

Property 支持值
Operator 支持标准运算符列表中的所有运算符。 但是,当与请求正文匹配条件一起使用时,Any匹配条件与每个请求匹配,而Not Any匹配条件不匹配任何请求。
Value 一个或多个字符串或整数值,表示要匹配的请求正文文本的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。
大小写转换 标准字符串转换列表中的任何转换。

Example

在本示例中,我们将匹配请求正文包含 ERROR 字符串情况下的所有请求。 在评估匹配之前,我们将请求正文转换为大写,这样 error 和其他大小写变体也会触发此匹配条件。

显示“请求正文”匹配条件的门户屏幕截图。

请求文件名

“请求文件名”匹配条件标识在请求 URL 中包含指定文件名的请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

属性

Property 支持值
Operator 支持标准运算符列表中的所有运算符。 但是,当与请求文件名匹配条件搭配使用时, Any 匹配条件与每个请求匹配,而Not Any 匹配条件不匹配任何请求。
Value 一个或多个字符串或整数值,表示要匹配的请求文件名的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。
大小写转换 标准字符串转换列表中的任何转换。

Example

在本示例中,我们将匹配请求文件名为 media.mp4 的所有请求。 在评估匹配之前,我们将文件名转换为小写,这样 MEDIA.MP4 和其他大小写变体也会触发此匹配条件。

显示“请求文件名”匹配条件的门户屏幕截图。

请求文件扩展名

“请求文件扩展名”匹配条件标识在请求 URL 的文件名中包含指定文件扩展名的请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

Note

不要加上前导句点。 例如,请使用 html 而不是 .html

属性

Property 支持值
Operator 支持标准运算符列表中的所有运算符。 但是,当与请求的文件扩展名的匹配条件一起使用时,Any 匹配条件匹配所有请求,Not Any 匹配条件不匹配任何请求。
Value 一个或多个字符串或整数值,表示要匹配的请求文件扩展名的值。 不要加上前导句点。 如果指定多个值,则使用 OR 逻辑对其进行评估。
大小写转换 标准字符串转换列表中的任何转换。

Example

在本示例中,我们将匹配请求文件扩展名为 pdfdocx 的所有请求。 在评估匹配之前,我们将请求文件扩展名转换为小写,这样 PDFDocX 和其他大小写变体也会触发此匹配条件。

显示“请求文件扩展名”匹配条件的门户屏幕截图。

请求标头

请求标头匹配条件标识请求中包含特定标头的请求。 你可以使用此匹配条件来检查标头是否存在,或检查标头是否与指定的值匹配。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

属性

Property 支持值
标题名称 一个表示 POST 参数名称的字符串值。
Operator 标准运算符列表中的任何运算符。
Value 一个或多个字符串或整数值,表示要匹配的请求头的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。
大小写转换 标准字符串转换列表中的任何转换。

Example

在本示例中,我们将匹配请求中包含名为 MyCustomHeader 的标头(不考虑其值)的所有请求。

显示“请求头”匹配条件的门户屏幕截图。

请求方法

请求方法匹配条件标识使用指定的 HTTP 请求方法的请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

属性

Property 支持值
Operator
  • 在 Azure 门户中:EqualNot Equal
  • 在 ARM 模板中:Equal;使用negateCondition属性指定“不等于
请求方法 以下来源的一个或多个 HTTP 方法:GETPOSTPUTDELETEHEADOPTIONSTRACE。 如果指定多个值,则使用 OR 逻辑对其进行评估。

Example

在本示例中,我们将匹配使用 DELETE 方法的所有请求。

显示“请求方法”匹配条件的门户屏幕截图。

请求路径

请求路径匹配条件标识请求 URL 中包含指定路径的请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

Note

该路径是 URL 的一部分,位于主机名和斜杠之后。 例如,在 URL https://www.contoso.com/files/secure/file1.pdf 中,路径为 files/secure/file1.pdf

属性

Property 支持值
Operator
  • 支持标准运算符列表中的所有运算符。 但是,当与请求路径匹配条件一起使用时,Any 匹配条件与每个请求匹配,“无任何匹配”条件与任何请求不匹配。
  • 通配符:当请求路径与通配符表达式匹配时匹配。 通配符表达式可以包含 * 字符,用于与路径中的零个或零个以上的字符匹配。 例如,通配符表达式 files/customer*/file.pdf 与路径 files/customer1/file.pdffiles/customer109/file.pdffiles/customer/file.pdf 匹配,但与 files/customer2/anotherfile.pdf 不匹配。
    • 在 Azure 门户中:WildcardsNot Wildcards
    • 在 ARM 模板中: Wildcard;使用 negateCondition 属性指定 非通配符
Value 一个或多个字符串或整数值,表示要匹配的请求路径的值。 如果指定前导斜杠,则会忽略它。 如果指定多个值,则使用 OR 逻辑对其进行评估。
大小写转换 标准字符串转换列表中的任何转换。

Example

在本示例中,我们将匹配请求文件路径以 files/secure/ 开头的所有请求。 在评估匹配之前,我们将请求文件扩展名转换为小写,这样对 files/SECURE/ 和其他大小写变体的请求也将触发此匹配条件。

显示“请求路径”匹配条件的门户屏幕截图。

请求协议

请求协议匹配条件标识使用指定协议(HTTP 或 HTTPS)的请求。

Note

协议 有时也称为 方案

属性

Property 支持值
Operator
  • 在 Azure 门户中:EqualNot Equal
  • 在 ARM 模板中:Equal;使用negateCondition属性指定“不等于
请求方法 HTTPHTTPS

Example

在本示例中,我们将匹配使用 HTTP 协议的所有请求。

显示“请求协议”匹配条件的门户屏幕截图。

请求的 URL

识别那些与指定 URL 匹配的请求。 将评估整个 URL,包括协议和查询字符串,但不包括片段。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

Tip

使用此规则条件时,请确保包含协议和尾随正斜杠 /。 例如,使用 https://www.contoso.com/ 而不只是 www.contoso.com

属性

Property 支持值
Operator 支持标准运算符列表中的所有运算符。 但是,当与请求 URL 匹配条件一起使用时,Any 匹配条件与每个请求匹配,或者非任何 匹配条件与任何请求 不匹配。
Value 一个或多个字符串或整数值,表示要匹配的请求 URL 的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。
大小写转换 标准字符串转换列表中的任何转换。

Example

在本示例中,我们将匹配请求 URL 以 https://api.contoso.com/customers/123 开头的所有请求。 在评估匹配之前,我们将请求文件扩展名转换为小写,这样对 https://api.contoso.com/Customers/123 和其他大小写变体的请求也将触发此匹配条件。

显示“请求 URL”匹配条件的门户屏幕截图。

主机名

主机名匹配条件根据客户端请求中的指定主机名标识请求。 匹配条件使用 Host 标头值来评估主机名。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

属性

Property 支持值
Operator 支持标准运算符列表中的所有运算符。 但是,当与主机名匹配条件一起使用时,Any 匹配条件与每个请求匹配,“无任何”匹配条件与任何请求不匹配。
Value 一个或多个字符串值,表示要匹配的请求主机名的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。
大小写转换 标准字符串转换列表中的任何大小写转换。

Example

在此示例中,我们将匹配其 Host 标头以 contoso.com 结尾的所有请求。

显示主机名匹配条件的门户屏幕截图。

SSL 协议

SSL 协议匹配条件根据已建立 TLS 连接的 SSL 协议标识请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

属性

Property 支持值
Operator
  • 在 Azure 门户中:EqualNot Equal
  • 在 ARM 模板中:Equal;使用negateCondition属性指定“不等于
SSL 协议
  • 在 Azure 门户中:1.01.11.2
  • 在 ARM 模板中:TLSv1TLSv1.1TLSv1.2

Example

在此示例中,我们将匹配使用 TLS 1.2 协议的所有请求。

显示 SSL 协议匹配条件的门户屏幕截图。

套接字地址

套接字地址匹配条件,根据直接连接到 Azure Front Door 边缘的 IP 地址来标识请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

Note

如果客户端使用 HTTP 代理或负载平衡器发送请求,套接字地址就是代理或负载平衡器的 IP 地址。

如果需要根据客户端的原始 IP 地址进行匹配,请使用 远程地址 匹配条件。

  • 在指定 IP 地址块时使用 CIDR 表示法。 也就是说,IP 地址块的语法是,基本 IP 地址后跟一个正斜杠和前缀大小。 例如:
    • IPv4 示例5.5.5.64/26 匹配从地址 5.5.5.64 到 5.5.5.127 的任何请求。
    • IPv6 示例1:2:3:/48 匹配来自地址 1:2:3:0:0:0:0:0 到 1:2:3:ffff:ffff:ffff:ffff:ffff 的所有请求。
  • 当你指定多个 IP 地址和 IP 地址块时,将应用“OR”逻辑。
    • IPv4 示例:如果添加两个 IP 地址1.2.3.410.20.30.40,则来自地址 1.2.3.4 或 10.20.30.40 的任何请求都会匹配条件。
    • IPv6 示例:如果添加两个 IP 地址 1:2:3:4:5:6:7:8 ,则 10:20:30:40:50:60:70:80条件匹配来自地址 1:2:3:4:5:5:6:8 或 10:20:30:40:50:60:70:80 的任何请求。

属性

Property 支持值
Operator
  • 在 Azure 门户中:IP MatchNot IP Match
  • 在 ARM 模板中:IPMatch;使用 negateCondition 属性指定“非 IP 匹配”
Value 指定一个或多个 IP 地址范围。 如果指定多个 IP 地址范围,则使用 OR 逻辑对其进行评估。

Example

在此示例中,我们将匹配来自 5.5.5.64/26 范围内的 IP 地址的所有请求。

显示套接字地址匹配条件的门户屏幕截图。

客户端端口

客户端端口匹配条件根据发出请求的客户端的 TCP 端口标识请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

属性

Property 支持值
Operator 支持标准运算符列表中的所有运算符。 当与客户端端口匹配条件一起使用时,Any匹配条件会与每个请求匹配,而Not Any匹配条件则不会与任何请求匹配。
Value 一个或多个端口号,以整数表示。 如果指定多个值,则使用 OR 逻辑对其进行评估。

Example

在此示例中,我们将匹配客户端端口为 1234 的所有请求。

显示客户端端口匹配条件的门户屏幕截图。

服务器端口

服务器端口匹配条件根据接受请求的 Azure Front Door 服务器的 TCP 端口标识请求。 端口必须是 80 或 443。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。

属性

Property 支持值
Operator 支持标准运算符列表中的所有运算符。 但是,当与服务器端口匹配条件一起使用时,任何匹配条件会与每个请求匹配,而不匹配的任何匹配条件不会与任何请求匹配。
Value 端口号,必须是 80 或 443。 如果指定多个值,则使用 OR 逻辑对其进行评估。

Example

在此示例中,我们将匹配服务器端口为 443 的所有请求。

显示服务器端口匹配条件的门户屏幕截图。

运算符列表

对于那些接受标准运算符列表中的值的规则,以下运算符有效:

Operator Description ARM 模板支持
Any 当存在任何值时匹配,不管具体是什么值。 operator: Any
Equal 当值与指定的字符串完全匹配时匹配。 operator: Equal
Contains 当值包含指定的字符串时匹配。 operator: Contains
小于 当值的长度小于指定的整数时匹配。 operator: LessThan
大于 当值的长度大于指定的整数时匹配。 operator: GreaterThan
小于或等于 当值的长度小于或等于指定的整数时匹配。 operator: LessThanOrEqual
大于或等于 当值的长度大于或等于指定的整数时匹配。 operator: GreaterThanOrEqual
开始于 当值以指定的字符串开头时匹配。 operator: BeginsWith
结尾为 当值以指定的字符串结尾时匹配。 operator: EndsWith
RegEx 当值匹配指定的正则表达式时匹配。 详见下文。 operator: RegEx
无任何 当没有任何值时匹配。 operator: AnynegateCondition : true
不等于 当值与指定的字符串不匹配时匹配。 operator: EqualnegateCondition : true
不包含 当值不包含指定的字符串时匹配。 operator: ContainsnegateCondition : true
不小于 当值的长度不小于指定的整数时匹配。 operator: LessThannegateCondition : true
不大于 当值的长度不大于指定的整数时匹配。 operator: GreaterThannegateCondition : true
不小于或等于 当值的长度不小于或等于指定的整数时匹配。 operator: LessThanOrEqualnegateCondition : true
不大于或等于 当值的长度不大于或等于指定的整数时匹配。 operator: GreaterThanOrEqualnegateCondition : true
开头不是 当值不以指定的字符串开头时匹配。 operator: BeginsWithnegateCondition : true
结尾不是 当值不以指定的字符串结尾时匹配。 operator: EndsWithnegateCondition : true
非正则表达式 当值不匹配指定的正则表达式时匹配。 详见下文。 operator: RegExnegateCondition : true

Tip

对于 小于大于或等于等数值运算符,使用的比较基于长度。 匹配条件中的值应该是一个整数,指定你要比较的长度。

正则表达式

正则表达式不支持以下操作:

  • 向后引用和捕获子表达式。
  • 任意零宽断言。
  • 子例程引用和递归模式。
  • 条件模式。
  • 回溯控制谓词。
  • \C 单字节指令。
  • \R 换行符匹配指令。
  • \K 启动匹配重置指令。
  • 标注和嵌入代码。
  • 原子组和所有格限定符。

字符串转换列表

对于可以转换字符串的规则,以下转换有效:

Transform Description ARM 模板支持
小写 将字符串转换为小写表示形式。 Lowercase
大写 将字符串转换为大写表示形式。 Uppercase
Trim 剪裁字符串中的前导和尾随空格。 Trim
删除空值 从字符串中删除 NULL 值。 RemoveNulls
URL 编码 对字符串进行 URL 编码。 UrlEncode
URL 解码 对字符串进行 URL 解码。 UrlDecode

后续步骤