你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
规则匹配条件
在 Azure Front Door 规则集中,规则由零个或多个匹配条件以及一个操作组成。 本文详细介绍了可在 Azure Front Door 规则集中使用的匹配条件。
在 Azure Front Door(经典)规则引擎中,规则由零个或多个匹配条件以及一个操作组成。 本文详细介绍了可在 Azure Front Door(经典)规则引擎中使用的匹配条件。
规则的第一部分是一个匹配条件或一组匹配条件。 一个规则最多可包含 10 个匹配条件。 匹配条件指定要对其执行所定义操作的特定请求类型。 如果使用多个匹配条件,则匹配条件使用 AND 逻辑组合在一起。 对于支持多个值的所有匹配条件,使用 OR 逻辑。
使用匹配条件,可以进行以下筛选:
- 基于特定的 IP 地址、端口或国家/地区来筛选请求。
- 按标头信息筛选请求。
- 筛选来自移动设备或桌面设备的请求。
- 根据请求文件名和文件扩展名筛选请求。
- 按主机名、SSL 协议、请求 URL、协议、路径、查询字符串、post 参数和其他值来筛选请求。
- 基于特定的 IP 地址或国家/地区来筛选请求。
- 按标头信息筛选请求。
- 筛选来自移动设备或桌面设备的请求。
- 根据请求文件名和文件扩展名筛选请求。
- 按请求 URL、协议、路径、查询字符串、post 参数和其他值来筛选请求。
设备类型
使用“设备类型”匹配条件来识别从移动设备或桌面设备发出的请求。
属性
属性 |
支持的值 |
运算符 |
- 在 Azure 门户中:
Equal 、Not Equal - 在 ARM 模板中:
Equal ;使用 negateCondition 属性指定 Not Equal
|
值 |
Mobile 、Desktop |
示例
在本示例中,我们将匹配所有被检测为来自移动设备的请求。
{
"name": "IsDevice",
"parameters": {
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"Mobile"
],
"typeName": "DeliveryRuleIsDeviceConditionParameters"
}
}
{
"name": "IsDevice",
"parameters": {
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"Mobile"
],
"@odata.type": "#Microsoft.Azure.Cdn.Models.DeliveryRuleIsDeviceConditionParameters"
}
}
{
name: 'IsDevice'
parameters: {
operator: 'Equal'
negateCondition: false
matchValues: [
'Mobile'
]
typeName: 'DeliveryRuleIsDeviceConditionParameters'
}
}
{
name: 'IsDevice'
parameters: {
operator: 'Equal'
negateCondition: false
matchValues: [
'Mobile'
]
'@odata.type': '#Microsoft.Azure.Cdn.Models.DeliveryRuleIsDeviceConditionParameters'
}
}
HTTP 版本
使用 HTTP 版本匹配条件来标识使用特定版本的 HTTP 协议发出的请求。
注意
HTTP 版本匹配条件仅适用于 Azure Front Door 标准版/高级版。
属性
属性 |
支持的值 |
运算符 |
- 在 Azure 门户中:
Equal 、Not Equal - 在 ARM 模板中:
Equal ;使用 negateCondition 属性指定 Not Equal
|
值 |
2.0 、1.1 、1.0 、0.9 |
示例
在本示例中,我们将匹配所有使用 HTTP 2.0 协议发送的请求。
{
"name": "HttpVersion",
"parameters": {
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"2.0"
],
"typeName": "DeliveryRuleHttpVersionConditionParameters"
}
}
{
name: 'HttpVersion'
parameters: {
operator: 'Equal'
negateCondition: false
matchValues: [
'2.0'
]
typeName: 'DeliveryRuleHttpVersionConditionParameters'
}
}
请求 Cookie
使用请求 Cookie 匹配条件来标识包含特定 Cookie 的请求。
注意
请求 Cookie 匹配条件仅适用于 Azure Front Door 标准版/高级版。
属性
属性 |
支持的值 |
Cookie 名称 |
一个表示 Cookie 名称的字符串值。 |
运算符 |
标准运算符列表中的任何运算符。 |
值 |
一个或多个字符串或整数值,表示要匹配的请求头的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 |
标准字符串转换列表中的任何转换。 |
示例
在本示例中,我们将匹配名为 deploymentStampId
且值为 1
的 Cookie 的所有请求。
{
"name": "Cookies",
"parameters": {
"selector": "deploymentStampId",
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"1"
],
"transforms": [],
"typeName": "DeliveryRuleCookiesConditionParameters"
}
}
{
name: 'Cookies'
parameters: {
selector: 'deploymentStampId'
operator: 'Equal'
negateCondition: false
matchValues: [
'1'
]
typeName: 'DeliveryRuleCookiesConditionParameters'
}
}
Post 参数
使用“post 参数”匹配条件,可以根据 POST 请求正文中提供的参数来识别请求。 单个匹配条件匹配 POST 请求正文中的单个参数。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
注意
“post 参数”匹配条件适用于 application/x-www-form-urlencoded
内容类型。
属性
属性 |
支持的值 |
Post 参数 |
一个表示 POST 参数名称的字符串值。 |
运算符 |
标准运算符列表中的任何运算符。 |
值 |
一个或多个字符串或整数值,表示要匹配的 POST 参数的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 |
标准字符串转换列表中的任何转换。 |
示例
在本示例中,我们将匹配所有 POST 请求,其中,customerName
参数是在请求正文中提供的,并且 customerName
值以字母 J
或 K
开头。 我们使用大小写转换将输入值转换为大写,这样所有以 J
、j
、K
和 k
开头的值都会匹配。
{
"name": "PostArgs",
"parameters": {
"selector": "customerName",
"operator": "BeginsWith",
"negateCondition": false,
"matchValues": [
"J",
"K"
],
"transforms": [
"Uppercase"
],
"typeName": "DeliveryRulePostArgsConditionParameters"
}
{
"name": "PostArgs",
"parameters": {
"selector": "customerName",
"operator": "BeginsWith",
"negateCondition": false,
"matchValues": [
"J",
"K"
],
"transforms": [
"Uppercase"
],
"@odata.type": "#Microsoft.Azure.Cdn.Models.DeliveryRulePostArgsConditionParameters"
}
{
name: 'PostArgs'
parameters: {
selector: 'customerName'
operator: 'BeginsWith'
negateCondition: false
matchValues: [
'J'
'K'
]
transforms: [
'Uppercase'
]
typeName: 'DeliveryRulePostArgsConditionParameters'
}
}
{
name: 'PostArgs'
parameters: {
selector: 'customerName'
operator: 'BeginsWith'
negateCondition: false
matchValues: [
'J'
'K'
]
transforms: [
'Uppercase'
]
'@odata.type': '#Microsoft.Azure.Cdn.Models.DeliveryRulePostArgsConditionParameters'
}
}
查询字符串
使用“查询字符串”匹配条件,可以标识包含特定查询字符串的请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
注意
整个查询字符串是作为单个字符串匹配的,不包含前导 ?
。
属性
属性 |
支持的值 |
运算符 |
支持标准运算符列表中的所有运算符。 但是,当与 query string 匹配条件一起使用时,Any 匹配条件会匹配每个请求,Not Any 匹配条件会与任何请求都不匹配。 |
查询字符串 |
一个或多个字符串或整数值,表示要匹配的查询字符串的值。 不要在查询字符串的开头加上 ? 。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 |
标准字符串转换列表中的任何转换。 |
示例
在本示例中,我们将匹配查询字符串包含 language=en-US
字符串情况下的所有请求。 我们需要让匹配条件区分大小写,因此我们不转换大小写。
{
"name": "QueryString",
"parameters": {
"operator": "Contains",
"negateCondition": false,
"matchValues": [
"language=en-US"
],
"typeName": "DeliveryRuleQueryStringConditionParameters"
}
}
{
"name": "QueryString",
"parameters": {
"operator": "Contains",
"negateCondition": false,
"matchValues": [
"language=en-US"
],
"@odata.type": "#Microsoft.Azure.Cdn.Models.DeliveryRuleQueryStringConditionParameters"
}
}
{
name: 'QueryString'
parameters: {
operator: 'Contains'
negateCondition: false
matchValues: [
'language=en-US'
]
typeName: 'DeliveryRuleQueryStringConditionParameters'
}
}
{
name: 'QueryString'
parameters: {
operator: 'Contains'
negateCondition: false
matchValues: [
'language=en-US'
]
'@odata.type': '#Microsoft.Azure.Cdn.Models.DeliveryRuleQueryStringConditionParameters'
}
}
远程地址
“远程地址”匹配条件根据请求者的位置或 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.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:6:7:8 或 10:20:30:40:50:60:70:80 地址的请求时,会匹配此条件。
- 远程地址代表原始客户端 IP,该 IP 来自网络连接,或者如果用户在代理后面,通常为 X-Forwarded-For 请求头。 如果需要根据 TCP 请求的 IP 地址进行匹配,请使用套接字地址匹配条件(在标准版/高级版中可用)。
属性
属性 |
支持的值 |
运算符 |
- 在 Azure 门户中:
Geo Match 、Geo Not Match 、IP Match 或 IP Not Match - 在 ARM 模板中:
GeoMatch 和 IPMatch ;使用 negateCondition 属性来指定 Geo Not Match或 IP Not Match
|
值 |
- 对于
IP Match 或 IP Not Match 运算符:指定一个或多个 IP 地址范围。 如果指定多个 IP 地址范围,则使用 OR 逻辑对其进行评估。 - 对于
Geo Match 或 Geo Not Match 运算符:使用国家/地区代码指定一个或多个位置。
|
示例
在本示例中,我们将匹配不是源自美国的所有请求。
{
"name": "RemoteAddress",
"parameters": {
"operator": "GeoMatch",
"negateCondition": true,
"matchValues": [
"US"
],
"typeName": "DeliveryRuleRemoteAddressConditionParameters"
}
}
{
"name": "RemoteAddress",
"parameters": {
"operator": "GeoMatch",
"negateCondition": true,
"matchValues": [
"US"
],
"@odata.type": "#Microsoft.Azure.Cdn.Models.DeliveryRuleRemoteAddressConditionParameters"
}
}
{
name: 'RemoteAddress'
parameters: {
operator: 'GeoMatch'
negateCondition: true
matchValues: [
'US'
]
typeName: 'DeliveryRuleRemoteAddressConditionParameters'
}
}
{
name: 'RemoteAddress'
parameters: {
operator: 'GeoMatch'
negateCondition: true
matchValues: [
'US'
]
'@odata.type': '#Microsoft.Azure.Cdn.Models.DeliveryRuleRemoteAddressConditionParameters'
}
}
请求正文
“请求正文”匹配条件根据请求正文中出现的特定文本识别请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
注意
如果请求正文的大小超过 64 KB,那么“请求正文”匹配条件只考虑前面的 64 KB。
属性
属性 |
支持的值 |
运算符 |
支持标准运算符列表中的所有运算符。 但是,当与 request body 匹配条件一起使用时,Any 匹配条件会匹配每个请求,Not Any 匹配条件会与任何请求都不匹配。 |
值 |
一个或多个字符串或整数值,表示要匹配的请求正文文本的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 |
标准字符串转换列表中的任何转换。 |
示例
在本示例中,我们将匹配请求正文包含 ERROR
字符串情况下的所有请求。 在评估匹配之前,我们将请求正文转换为大写,这样 error
和其他大小写变体也会触发此匹配条件。
{
"name": "RequestBody",
"parameters": {
"operator": "Contains",
"negateCondition": false,
"matchValues": [
"ERROR"
],
"transforms": [
"Uppercase"
],
"typeName": "DeliveryRuleRequestBodyConditionParameters"
}
}
{
"name": "RequestBody",
"parameters": {
"operator": "Contains",
"negateCondition": false,
"matchValues": [
"ERROR"
],
"transforms": [
"Uppercase"
],
"@odata.type": "#Microsoft.Azure.Cdn.Models.DeliveryRuleRequestBodyConditionParameters"
}
}
{
name: 'RequestBody'
parameters: {
operator: 'Contains'
negateCondition: false
matchValues: [
'ERROR'
]
transforms: [
'Uppercase'
]
typeName: 'DeliveryRuleRequestBodyConditionParameters'
}
}
{
name: 'RequestBody'
parameters: {
operator: 'Contains'
negateCondition: false
matchValues: [
'ERROR'
]
transforms: [
'Uppercase'
]
'@odata.type': '#Microsoft.Azure.Cdn.Models.DeliveryRuleRequestBodyConditionParameters'
}
}
请求文件名
“请求文件名”匹配条件标识在请求 URL 中包含指定文件名的请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
属性
属性 |
支持的值 |
运算符 |
支持标准运算符列表中的所有运算符。 但是,当与 request file name 匹配条件一起使用时,Any 匹配条件会匹配每个请求,Not Any 匹配条件会与任何请求都不匹配。 |
值 |
一个或多个字符串或整数值,表示要匹配的请求文件名的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 |
标准字符串转换列表中的任何转换。 |
示例
在本示例中,我们将匹配请求文件名为 media.mp4
的所有请求。 在评估匹配之前,我们将文件名转换为小写,这样 MEDIA.MP4
和其他大小写变体也会触发此匹配条件。
{
"name": "UrlFileName",
"parameters": {
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"media.mp4"
],
"transforms": [
"Lowercase"
],
"typeName": "DeliveryRuleUrlFilenameConditionParameters"
}
}
{
"name": "UrlFileName",
"parameters": {
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"media.mp4"
],
"transforms": [
"Lowercase"
],
"@odata.type": "#Microsoft.Azure.Cdn.Models.DeliveryRuleUrlFilenameConditionParameters"
}
}
{
name: 'UrlFileName'
parameters: {
operator: 'Equal'
negateCondition: false
matchValues: [
'media.mp4'
]
transforms: [
'Lowercase'
]
typeName: 'DeliveryRuleUrlFilenameConditionParameters'
}
}
{
name: 'UrlFileName'
parameters: {
operator: 'Equal'
negateCondition: false
matchValues: [
'media.mp4'
]
transforms: [
'Lowercase'
]
'@odata.type': '#Microsoft.Azure.Cdn.Models.DeliveryRuleUrlFilenameConditionParameters'
}
}
请求文件扩展名
“请求文件扩展名”匹配条件标识在请求 URL 的文件名中包含指定文件扩展名的请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
注意
不要加上前导句点。 例如,请使用 html
而不是 .html
。
属性
属性 |
支持的值 |
运算符 |
支持标准运算符列表中的所有运算符。 但是,当与 request file extension 匹配条件一起使用时,Any 匹配条件会匹配每个请求,Not Any 匹配条件会与任何请求都不匹配。 |
值 |
一个或多个字符串或整数值,表示要匹配的请求文件扩展名的值。 不要加上前导句点。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 |
标准字符串转换列表中的任何转换。 |
示例
在本示例中,我们将匹配请求文件扩展名为 pdf
或 docx
的所有请求。 在评估匹配之前,我们将请求文件扩展名转换为小写,这样 PDF
、DocX
和其他大小写变体也会触发此匹配条件。
{
"name": "UrlFileExtension",
"parameters": {
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"pdf",
"docx"
],
"transforms": [
"Lowercase"
],
"typeName": "DeliveryRuleUrlFileExtensionMatchConditionParameters"
}
{
"name": "UrlFileExtension",
"parameters": {
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"pdf",
"docx"
],
"transforms": [
"Lowercase"
],
"@odata.type": "#Microsoft.Azure.Cdn.Models.DeliveryRuleUrlFileExtensionMatchConditionParameters"
}
{
name: 'UrlFileExtension'
parameters: {
operator: 'Equal'
negateCondition: false
matchValues: [
'pdf'
'docx'
]
transforms: [
'Lowercase'
]
typeName: 'DeliveryRuleUrlFileExtensionMatchConditionParameters'
}
}
{
name: 'UrlFileExtension'
parameters: {
operator: 'Equal'
negateCondition: false
matchValues: [
'pdf'
'docx'
]
transforms: [
'Lowercase'
]
'@odata.type': '#Microsoft.Azure.Cdn.Models.DeliveryRuleUrlFileExtensionMatchConditionParameters'
}
}
“请求头”匹配条件标识请求中包含特定标头的那些请求。 你可以使用此匹配条件来检查标头是否存在,或检查标头是否与指定的值匹配。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
属性
属性 |
支持的值 |
标头名称 |
一个表示 POST 参数名称的字符串值。 |
运算符 |
标准运算符列表中的任何运算符。 |
值 |
一个或多个字符串或整数值,表示要匹配的请求头的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 |
标准字符串转换列表中的任何转换。 |
示例
在本示例中,我们将匹配请求中包含名为 MyCustomHeader
的标头(不考虑其值)的所有请求。
{
"name": "RequestHeader",
"parameters": {
"selector": "MyCustomHeader",
"operator": "Any",
"negateCondition": false,
"typeName": "DeliveryRuleRequestHeaderConditionParameters"
}
}
{
"name": "RequestHeader",
"parameters": {
"selector": "MyCustomHeader",
"operator": "Any",
"negateCondition": false,
"@odata.type": "#Microsoft.Azure.Cdn.Models.DeliveryRuleRequestHeaderConditionParameters"
}
}
{
name: 'RequestHeader'
parameters: {
selector: 'MyCustomHeader',
operator: 'Any'
negateCondition: false
typeName: 'DeliveryRuleRequestHeaderConditionParameters'
}
}
{
name: 'RequestHeader'
parameters: {
selector: 'MyCustomHeader',
operator: 'Any'
negateCondition: false
'@odata.type': '#Microsoft.Azure.Cdn.Models.DeliveryRuleRequestHeaderConditionParameters'
}
}
请求方法
“请求方法”匹配条件标识使用指定 HTTP 请求方法的那些请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
属性
属性 |
支持的值 |
运算符 |
- 在 Azure 门户中:
Equal 、Not Equal - 在 ARM 模板中:
Equal ;使用 negateCondition 属性指定 Not Equal
|
请求方法 |
以下来源的一个或多个 HTTP 方法:GET 、POST 、PUT 、DELETE 、HEAD 、OPTIONS 和 TRACE 。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
示例
在本示例中,我们将匹配使用 DELETE
方法的所有请求。
{
"name": "RequestMethod",
"parameters": {
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"DELETE"
],
"typeName": "DeliveryRuleRequestMethodConditionParameters"
}
}
{
"name": "RequestMethod",
"parameters": {
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"DELETE"
],
"@odata.type": "#Microsoft.Azure.Cdn.Models.DeliveryRuleRequestMethodConditionParameters"
}
}
{
name: 'RequestMethod'
parameters: {
operator: 'Equal'
negateCondition: false
matchValues: [
'DELETE'
]
typeName: 'DeliveryRuleRequestMethodConditionParameters'
}
}
{
name: 'RequestMethod'
parameters: {
operator: 'Equal'
negateCondition: false
matchValues: [
'DELETE'
]
'@odata.type': '#Microsoft.Azure.Cdn.Models.DeliveryRuleRequestMethodConditionParameters'
}
}
请求路径
“请求路径”匹配条件标识在请求 URL 中包含指定路径的请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
注意
该路径是 URL 的一部分,位于主机名和斜杠之后。 例如,在 URL https://www.contoso.com/files/secure/file1.pdf
中,路径为 files/secure/file1.pdf
。
属性
属性 |
支持的值 |
运算符 |
- 支持标准运算符列表中的所有运算符。 但是,当与 request path 匹配条件一起使用时,Any 匹配条件会匹配每个请求,Not Any 匹配条件会与任何请求都不匹配。
- 通配符:在请求路径与通配符表达式匹配时匹配。 通配符表达式可以包含
* 字符,用于与路径中的零个或零个以上的字符匹配。 例如,通配符表达式 files/customer*/file.pdf 与路径 files/customer1/file.pdf 、files/customer109/file.pdf 、files/customer/file.pdf 匹配,但与 files/customer2/anotherfile.pdf 不匹配。- 在 Azure 门户中:
Wildcards 、Not Wildcards - 在 ARM 模板中:
Wildcard ;使用 negateCondition 属性指定“非通配符”
|
值 |
一个或多个字符串或整数值,表示要匹配的请求路径的值。 如果指定前导斜杠,则会忽略它。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 |
标准字符串转换列表中的任何转换。 |
属性 |
支持的值 |
运算符 |
支持标准运算符列表中的所有运算符。 但是,当与 request path 匹配条件一起使用时,Any 匹配条件会匹配每个请求,Not Any 匹配条件会与任何请求都不匹配。 |
值 |
一个或多个字符串或整数值,表示要匹配的请求路径的值。 如果指定前导斜杠,则会忽略它。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 |
标准字符串转换列表中的任何转换。 |
示例
在本示例中,我们将匹配请求文件路径以 files/secure/
开头的所有请求。 在评估匹配之前,我们将请求文件扩展名转换为小写,这样对 files/SECURE/
和其他大小写变体的请求也将触发此匹配条件。
{
"name": "UrlPath",
"parameters": {
"operator": "BeginsWith",
"negateCondition": false,
"matchValues": [
"files/secure/"
],
"transforms": [
"Lowercase"
],
"typeName": "DeliveryRuleUrlPathMatchConditionParameters"
}
}
{
"name": "UrlPath",
"parameters": {
"operator": "BeginsWith",
"negateCondition": false,
"matchValues": [
"files/secure/"
],
"transforms": [
"Lowercase"
],
"@odata.type": "#Microsoft.Azure.Cdn.Models.DeliveryRuleUrlPathMatchConditionParameters"
}
}
{
name: 'UrlPath'
parameters: {
operator: 'BeginsWith'
negateCondition: false
matchValues: [
'files/secure/'
]
transforms: [
'Lowercase'
]
typeName: 'DeliveryRuleUrlPathMatchConditionParameters'
}
}
{
name: 'UrlPath'
parameters: {
operator: 'BeginsWith'
negateCondition: false
matchValues: [
'files/secure/'
]
transforms: [
'Lowercase'
]
'@odata.type': '#Microsoft.Azure.Cdn.Models.DeliveryRuleUrlPathMatchConditionParameters'
}
}
请求协议
“请求协议”匹配条件标识使用指定协议(HTTP 或 HTTPS)的请求。
属性
属性 |
支持的值 |
运算符 |
- 在 Azure 门户中:
Equal 、Not Equal - 在 ARM 模板中:
Equal ;使用 negateCondition 属性指定 Not Equal
|
请求方法 |
HTTP 、HTTPS |
示例
在本示例中,我们将匹配使用 HTTP
协议的所有请求。
{
"name": "RequestScheme",
"parameters": {
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"HTTP"
],
"typeName": "DeliveryRuleRequestSchemeConditionParameters"
}
}
{
"name": "RequestScheme",
"parameters": {
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"HTTP"
],
"@odata.type": "#Microsoft.Azure.Cdn.Models.DeliveryRuleRequestSchemeConditionParameters"
}
}
{
name: 'RequestScheme'
parameters: {
operator: 'Equal'
negateCondition: false
matchValues: [
'HTTP'
]
typeName: 'DeliveryRuleRequestSchemeConditionParameters'
}
}
{
name: 'RequestScheme'
parameters: {
operator: 'Equal'
negateCondition: false
matchValues: [
'HTTP'
]
'@odata.type': '#Microsoft.Azure.Cdn.Models.DeliveryRuleRequestSchemeConditionParameters'
}
}
请求 URL
识别那些与指定 URL 匹配的请求。 将评估整个 URL,包括协议和查询字符串,但不包括片段。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
提示
使用此规则条件时,请确保包含协议和尾随正斜杠 /
。 例如,使用 https://www.contoso.com/
而不只是 www.contoso.com
。
属性
属性 |
支持的值 |
运算符 |
支持标准运算符列表中的所有运算符。 但是,当与 request URL 匹配条件一起使用时,Any 匹配条件会匹配每个请求,Not Any 匹配条件会与任何请求都不匹配。 |
值 |
一个或多个字符串或整数值,表示要匹配的请求 URL 的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 |
标准字符串转换列表中的任何转换。 |
示例
在本示例中,我们将匹配请求 URL 以 https://api.contoso.com/customers/123
开头的所有请求。 在评估匹配之前,我们将请求文件扩展名转换为小写,这样对 https://api.contoso.com/Customers/123
和其他大小写变体的请求也将触发此匹配条件。
{
"name": "RequestUri",
"parameters": {
"operator": "BeginsWith",
"negateCondition": false,
"matchValues": [
"https://api.contoso.com/customers/123"
],
"transforms": [
"Lowercase"
],
"typeName": "DeliveryRuleRequestUriConditionParameters"
}
}
{
"name": "RequestUri",
"parameters": {
"operator": "BeginsWith",
"negateCondition": false,
"matchValues": [
"https://api.contoso.com/customers/123"
],
"transforms": [
"Lowercase"
],
"@odata.type": "#Microsoft.Azure.Cdn.Models.DeliveryRuleRequestUriConditionParameters"
}
}
{
name: 'RequestUri'
parameters: {
operator: 'BeginsWith'
negateCondition: false
matchValues: [
'https://api.contoso.com/customers/123'
]
transforms: [
'Lowercase'
]
typeName: 'DeliveryRuleRequestUriConditionParameters'
}
}
{
name: 'RequestUri'
parameters: {
operator: 'BeginsWith'
negateCondition: false
matchValues: [
'https://api.contoso.com/customers/123'
]
transforms: [
'Lowercase'
]
'@odata.type': '#Microsoft.Azure.Cdn.Models.DeliveryRuleRequestUriConditionParameters'
}
}
主机名
“主机名”匹配条件根据客户端请求中指定的主机名来识别请求。 匹配条件使用 Host
标头值来评估主机名。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
属性
属性 |
支持的值 |
运算符 |
支持标准运算符列表中的所有运算符。 但是,当与 host name 匹配条件一起使用时,Any 匹配条件会匹配每个请求,Not Any 匹配条件会与任何请求都不匹配。 |
值 |
一个或多个字符串值,表示要匹配的请求主机名的值。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
大小写转换 |
标准字符串转换列表中的任何大小写转换。 |
示例
在此示例中,我们将匹配其 Host
标头以 contoso.com
结尾的所有请求。
{
"name": "HostName",
"parameters": {
"operator": "EndsWith",
"negateCondition": false,
"matchValues": [
"contoso.com"
],
"transforms": [],
"typeName": "DeliveryRuleHostNameConditionParameters"
}
}
{
name: 'HostName'
parameters: {
operator: 'EndsWith'
negateCondition: false
matchValues: [
'contoso.com'
]
transforms: []
typeName: 'DeliveryRuleHostNameConditionParameters'
}
}
SSL 协议
“SSL 协议”匹配条件根据已建立的 TLS 连接的 SSL 协议来识别请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
属性
属性 |
支持的值 |
运算符 |
- 在 Azure 门户中:
Equal 、Not Equal - 在 ARM 模板中:
Equal ;使用 negateCondition 属性指定 Not Equal
|
SSL 协议 |
- 在 Azure 门户中:
1.0 、1.1 、1.2 - 在 ARM 模板中:
TLSv1 、TLSv1.1 、TLSv1.2
|
示例
在此示例中,我们将匹配使用 TLS 1.2 协议的所有请求。
{
"name": "SslProtocol",
"parameters": {
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"TLSv1.2"
],
"typeName": "DeliveryRuleSslProtocolConditionParameters"
}
},
{
name: 'SslProtocol'
parameters: {
operator: 'Equal'
negateCondition: false
matchValues: [
'TLSv1.2'
]
typeName: 'DeliveryRuleSslProtocolConditionParameters'
}
}
套接字地址
“套接字地址”匹配条件根据与 Azure Front Door 边缘的直接连接的 IP 地址来识别请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
注意
如果客户端使用 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.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:6:7:8 或 10:20:30:40:50:60:70:80 地址的请求时,会匹配此条件。
属性
属性 |
支持的值 |
运算符 |
- 在 Azure 门户中:
IP Match 、Not IP Match - 在 ARM 模板中:
IPMatch ;使用 negateCondition 属性指定“非 IP 匹配”
|
值 |
指定一个或多个 IP 地址范围。 如果指定多个 IP 地址范围,则使用 OR 逻辑对其进行评估。 |
示例
在此示例中,我们将匹配来自 5.5.5.64/26 范围内的 IP 地址的所有请求。
{
"name": "SocketAddr",
"parameters": {
"operator": "IPMatch",
"negateCondition": false,
"matchValues": [
"5.5.5.64/26"
],
"typeName": "DeliveryRuleSocketAddrConditionParameters"
}
}
{
name: 'SocketAddr'
parameters: {
operator: 'IPMatch'
negateCondition: false
matchValues: [
'5.5.5.64/26'
]
typeName: 'DeliveryRuleSocketAddrConditionParameters'
}
}
客户端端口
“客户端端口”匹配条件根据发出请求的客户端的 TCP 端口来识别请求。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
属性
属性 |
支持的值 |
运算符 |
支持标准运算符列表中的所有运算符。 但是,当与 client port 匹配条件一起使用时,Any 匹配条件会匹配每个请求,Not Any 匹配条件会与任何请求都不匹配。 |
值 |
一个或多个端口号,以整数表示。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
示例
在此示例中,我们将匹配客户端端口为 1234 的所有请求。
{
"name": "ClientPort",
"parameters": {
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"1111"
],
"typeName": "DeliveryRuleClientPortConditionParameters"
}
}
{
name: 'ClientPort'
parameters: {
operator: 'Equal'
negateCondition: false
matchValues: [
'1111'
]
typeName: 'DeliveryRuleClientPortConditionParameters'
}
}
服务器端口
“服务器端口”匹配条件根据接受请求的 Azure Front Door 服务器的 TCP 端口来识别请求。 端口必须是 80 或 443。 你可以指定要匹配的多个值,这些值可以使用 OR 逻辑组合在一起。
属性
属性 |
支持的值 |
运算符 |
支持标准运算符列表中的所有运算符。 但是,当与 server port 匹配条件一起使用时,Any 匹配条件会匹配每个请求,Not Any 匹配条件会与任何请求都不匹配。 |
值 |
端口号,必须是 80 或 443。 如果指定多个值,则使用 OR 逻辑对其进行评估。 |
示例
在此示例中,我们将匹配服务器端口为 443 的所有请求。
{
"name": "ServerPort",
"parameters": {
"operator": "Equal",
"negateCondition": false,
"matchValues": [
"443"
],
"typeName": "DeliveryRuleServerPortConditionParameters"
}
}
{
name: 'ServerPort'
parameters: {
operator: 'Equal'
negateCondition: false
matchValues: [
'443'
]
typeName: 'DeliveryRuleServerPortConditionParameters'
}
}
操作员列表
对于那些接受标准运算符列表中的值的规则,以下运算符有效:
运算符 |
说明 |
ARM 模板支持 |
任意 |
当存在任何值时匹配,不管具体是什么值。 |
operator : Any |
等于 |
当值与指定的字符串完全匹配时匹配。 |
operator : Equal |
Contains |
当值包含指定的字符串时匹配。 |
operator : Contains |
小于 |
当值的长度小于指定的整数时匹配。 |
operator : LessThan |
大于 |
当值的长度大于指定的整数时匹配。 |
operator : GreaterThan |
小于或等于 |
当值的长度小于或等于指定的整数时匹配。 |
operator : LessThanOrEqual |
大于或等于 |
当值的长度大于或等于指定的整数时匹配。 |
operator : GreaterThanOrEqual |
开头为 |
当值以指定的字符串开头时匹配。 |
operator : BeginsWith |
结尾为 |
当值以指定的字符串结尾时匹配。 |
operator : EndsWith |
非任意 |
当没有任何值时匹配。 |
operator : Any 和 negateCondition : true |
Not Equal |
当值与指定的字符串不匹配时匹配。 |
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 |
运算符 |
说明 |
ARM 模板支持 |
任意 |
当存在任何值时匹配,不管具体是什么值。 |
operator : Any |
等于 |
当值与指定的字符串完全匹配时匹配。 |
operator : Equal |
Contains |
当值包含指定的字符串时匹配。 |
operator : Contains |
小于 |
当值的长度小于指定的整数时匹配。 |
operator : LessThan |
大于 |
当值的长度大于指定的整数时匹配。 |
operator : GreaterThan |
小于或等于 |
当值的长度小于或等于指定的整数时匹配。 |
operator : LessThanOrEqual |
大于或等于 |
当值的长度大于或等于指定的整数时匹配。 |
operator : GreaterThanOrEqual |
开头为 |
当值以指定的字符串开头时匹配。 |
operator : BeginsWith |
结尾为 |
当值以指定的字符串结尾时匹配。 |
operator : EndsWith |
正则表达式 |
当值匹配指定的正则表达式时匹配。 详见下文。 |
operator : RegEx |
非任意 |
当没有任何值时匹配。 |
operator : Any 和 negateCondition : true |
Not Equal |
当值与指定的字符串不匹配时匹配。 |
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 |
提示
对于数字运算符(例如“小于”和“大于或等于”),使用的比较基于长度。 匹配条件中的值应该是一个整数,指定你要比较的长度。
正则表达式
正则表达式不支持以下操作:
- 向后引用和捕获子表达式。
- 任意零宽断言。
- 子例程引用和递归模式。
- 条件模式。
- 回溯控制谓词。
\C
单字节指令。
\R
换行符匹配指令。
\K
启动匹配重置指令。
- 标注和嵌入代码。
- 原子组和所有格限定符。
对于可以转换字符串的规则,以下转换有效:
转换 |
说明 |
ARM 模板支持 |
转换为小写 |
将字符串转换为小写表示形式。 |
Lowercase |
转换为大写 |
将字符串转换为大写表示形式。 |
Uppercase |
Trim |
剪裁字符串中的前导和尾随空格。 |
Trim |
删除 NULL |
从字符串中删除 NULL 值。 |
RemoveNulls |
URL 编码 |
对字符串进行 URL 编码。 |
UrlEncode |
URL 解码 |
对字符串进行 URL 解码。 |
UrlDecode |
后续步骤