在 Azure Front Door 规则集中,规则由一个或多个匹配条件和动作组成。 本文详细介绍了可在 Azure Front Door 规则集中使用的匹配条件。
规则以一个匹配条件或一组匹配条件开始。 一条规则最多可有 10 个匹配条件。 匹配条件指定要对其执行所定义操作的特定请求类型。 如果你使用多个匹配条件,它们将使用 AND 逻辑组合在一起。 对于支持多个值的匹配条件,将使用 OR 逻辑。
使用匹配条件,可以进行以下筛选:
- 基于特定的 IP 地址、端口或国家/地区来筛选请求。
- 按标头信息筛选请求。
- 筛选来自移动设备或桌面设备的请求。
- 按请求文件名和文件扩展名筛选请求。
- 按主机名、SSL 协议、请求 URL、协议、路径、查询字符串、发布参数和其他值筛选请求。
设备类型
使用 设备类型 匹配条件标识来自移动设备或桌面设备的请求。
属性
Property | 支持值 |
---|---|
Operator |
|
Value |
Mobile 、Desktop |
Example
在本示例中,我们将匹配所有被检测为来自移动设备的请求。
HTTP 版本
使用 HTTP 版本 匹配条件来标识使用特定版本的 HTTP 协议发出的请求。
Note
HTTP 版本匹配条件仅适用于 Azure Front Door 标准版/高级版。
属性
Property | 支持值 |
---|---|
Operator |
|
Value |
2.0 、1.1 、1.0 、0.9 |
Example
在本示例中,我们将匹配所有使用 HTTP 2.0 协议发送的请求。
请求 Cookie
使用 请求 Cookie 匹配条件来标识包含特定 Cookie 的请求。
Note
请求 Cookie 匹配条件仅适用于 Azure Front Door Standard/Premium。
属性
Property | 支持值 |
---|---|
Cookie 名称 | 一个表示 Cookie 名称的字符串值。 |
Operator | 标准运算符列表中的任何运算符。 |
Value | 一个或多个字符串或整数值,表示要匹配的请求头的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 | 标准字符串转换列表中的任何转换。 |
Example
在本示例中,我们将匹配名为 deploymentStampId
且值为 1
的 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
值以字母 J
或 K
开头。 我们使用大小写转换将输入值转换为大写,这样所有以 J
、j
、K
和 k
开头的值都会匹配。
查询字符串
使用 查询字符串 匹配条件标识包含特定查询字符串的请求。 你可以指定要匹配的多个值,这些值可以使用 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 的所有请求。
-
IPv4 示例:
- 当你指定多个 IP 地址和 IP 地址块时,将应用“OR”逻辑。
-
IPv4 示例:如果添加两个 IP 地址
1.2.3.4
和10.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 的任何请求。
-
IPv4 示例:如果添加两个 IP 地址
- 远程地址代表原始客户端 IP,该 IP 来自网络连接,或者如果用户在代理后面,通常为 X-Forwarded-For 请求头。 如果需要根据 TCP 请求的 IP 地址进行匹配,请使用 套接字地址 匹配条件(在标准/高级版中可用)。
属性
Property | 支持值 |
---|---|
Operator |
|
Value |
|
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
在本示例中,我们将匹配请求文件扩展名为 pdf
或 docx
的所有请求。 在评估匹配之前,我们将请求文件扩展名转换为小写,这样 PDF
、DocX
和其他大小写变体也会触发此匹配条件。
请求标头
请求标头匹配条件标识请求中包含特定标头的请求。 你可以使用此匹配条件来检查标头是否存在,或检查标头是否与指定的值匹配。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
属性
Property | 支持值 |
---|---|
标题名称 | 一个表示 POST 参数名称的字符串值。 |
Operator | 标准运算符列表中的任何运算符。 |
Value | 一个或多个字符串或整数值,表示要匹配的请求头的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 | 标准字符串转换列表中的任何转换。 |
Example
在本示例中,我们将匹配请求中包含名为 MyCustomHeader
的标头(不考虑其值)的所有请求。
请求方法
请求方法匹配条件标识使用指定的 HTTP 请求方法的请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
属性
Property | 支持值 |
---|---|
Operator |
|
请求方法 | 以下来源的一个或多个 HTTP 方法:GET 、POST 、PUT 、DELETE 、HEAD 、OPTIONS 和 TRACE 。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
Example
在本示例中,我们将匹配使用 DELETE
方法的所有请求。
请求路径
请求路径匹配条件标识请求 URL 中包含指定路径的请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
Note
该路径是 URL 的一部分,位于主机名和斜杠之后。 例如,在 URL https://www.contoso.com/files/secure/file1.pdf
中,路径为 files/secure/file1.pdf
。
属性
Property | 支持值 |
---|---|
Operator |
|
Value | 一个或多个字符串或整数值,表示要匹配的请求路径的值。 如果指定前导斜杠,则会忽略它。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 | 标准字符串转换列表中的任何转换。 |
Example
在本示例中,我们将匹配请求文件路径以 files/secure/
开头的所有请求。 在评估匹配之前,我们将请求文件扩展名转换为小写,这样对 files/SECURE/
和其他大小写变体的请求也将触发此匹配条件。
请求协议
请求协议匹配条件标识使用指定协议(HTTP 或 HTTPS)的请求。
Note
协议 有时也称为 方案。
属性
Property | 支持值 |
---|---|
Operator |
|
请求方法 |
HTTP 、HTTPS |
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
和其他大小写变体的请求也将触发此匹配条件。
主机名
主机名匹配条件根据客户端请求中的指定主机名标识请求。 匹配条件使用 Host
标头值来评估主机名。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
属性
Property | 支持值 |
---|---|
Operator | 支持标准运算符列表中的所有运算符。 但是,当与主机名匹配条件一起使用时,Any 匹配条件与每个请求匹配,“无任何”匹配条件与任何请求不匹配。 |
Value | 一个或多个字符串值,表示要匹配的请求主机名的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 | 标准字符串转换列表中的任何大小写转换。 |
Example
在此示例中,我们将匹配其 Host
标头以 contoso.com
结尾的所有请求。
SSL 协议
SSL 协议匹配条件根据已建立 TLS 连接的 SSL 协议标识请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
属性
Property | 支持值 |
---|---|
Operator |
|
SSL 协议 |
|
Example
在此示例中,我们将匹配使用 TLS 1.2 协议的所有请求。
套接字地址
套接字地址匹配条件,根据直接连接到 Azure Front Door 边缘的 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 的所有请求。
-
IPv4 示例:
- 当你指定多个 IP 地址和 IP 地址块时,将应用“OR”逻辑。
-
IPv4 示例:如果添加两个 IP 地址
1.2.3.4
和10.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 的任何请求。
-
IPv4 示例:如果添加两个 IP 地址
属性
Property | 支持值 |
---|---|
Operator |
|
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 : Any 和 negateCondition : true |
不等于 | 当值与指定的字符串不匹配时匹配。 |
operator : Equal 和 negateCondition : true |
不包含 | 当值不包含指定的字符串时匹配。 |
operator : Contains 和 negateCondition : true |
不小于 | 当值的长度不小于指定的整数时匹配。 |
operator : LessThan 和 negateCondition : true |
不大于 | 当值的长度不大于指定的整数时匹配。 |
operator : GreaterThan 和 negateCondition : true |
不小于或等于 | 当值的长度不小于或等于指定的整数时匹配。 |
operator : LessThanOrEqual 和 negateCondition : true |
不大于或等于 | 当值的长度不大于或等于指定的整数时匹配。 |
operator : GreaterThanOrEqual 和 negateCondition : true |
开头不是 | 当值不以指定的字符串开头时匹配。 |
operator : BeginsWith 和 negateCondition : true |
结尾不是 | 当值不以指定的字符串结尾时匹配。 |
operator : EndsWith 和 negateCondition : true |
非正则表达式 | 当值不匹配指定的正则表达式时匹配。 详见下文。 |
operator : RegEx 和 negateCondition : true |
Tip
对于 小于 和 大于或等于等数值运算符,使用的比较基于长度。 匹配条件中的值应该是一个整数,指定你要比较的长度。
正则表达式
正则表达式不支持以下操作:
- 向后引用和捕获子表达式。
- 任意零宽断言。
- 子例程引用和递归模式。
- 条件模式。
- 回溯控制谓词。
-
\C
单字节指令。 -
\R
换行符匹配指令。 -
\K
启动匹配重置指令。 - 标注和嵌入代码。
- 原子组和所有格限定符。
字符串转换列表
对于可以转换字符串的规则,以下转换有效:
Transform | Description | ARM 模板支持 |
---|---|---|
小写 | 将字符串转换为小写表示形式。 | Lowercase |
大写 | 将字符串转换为大写表示形式。 | Uppercase |
Trim | 剪裁字符串中的前导和尾随空格。 | Trim |
删除空值 | 从字符串中删除 NULL 值。 | RemoveNulls |
URL 编码 | 对字符串进行 URL 编码。 | UrlEncode |
URL 解码 | 对字符串进行 URL 解码。 | UrlDecode |
后续步骤
- 详细了解 Azure Front Door 规则集。
- 了解如何配置你的第一个规则集。
- 详细了解 规则操作。