Azure Front Door 规则集 由包含匹配条件和动作的规则组成。 本文详细介绍了可在规则集中使用的操作。 操作定义了应用于匹配条件所识别的请求类型的行为。 在一个规则集中,一个规则最多可以有五个操作。 Front Door 还支持规则集作中的 服务器变量 。
以下操作可用于规则集中:
 路由配置替代
              路由配置替代操作用于替代请求的源组或缓存配置。 您可以选择替代或遵从路由中指定的源组配置。 但是,替代路由配置时,必须配置缓存。 否则,请求的缓存将被禁用。
你还可以针对特定请求替代文件的缓存方式,包括:
- 替代由源指定的缓存行为。
 
- 使用查询字符串参数生成请求的缓存密钥的方式。
 
- 生存时间 (TTL) 值,该值控制内容在缓存中保留多长时间。
 
属性
| Property | 
支持值 | 
| 替代源组 | 
- 
              是的: 重写用于请求的源组。
  - 
              不: 使用路由中指定的源组。
 
  | 
| Caching | 
- 
              启用: 强制为请求启用缓存。
 - 
              禁用: 强制禁用请求的缓存。
 
  | 
当“替代源组”设置为“是”时,请设置以下属性:
| Property | 
支持值 | 
| 源组 | 
请求应路由到的源组。 此设置会替代 Front Door 终结点路由中指定的配置。 | 
| 转发协议 | 
Front Door 将请求转发到源时使用的协议。 支持的值为“仅限 HTTP”、“仅限 HTTPS”、“匹配传入的请求”。 此设置会替代 Front Door 终结点路由中指定的配置。 | 
当 缓存 设置为 “已启用”时,请设置以下属性:
| Property | 
支持值 | 
| 查询字符串缓存行为 | 
- 忽略查询字符串:生成缓存键时不考虑查询字符串。 在 ARM 模板中,将 
queryStringCachingBehavior 属性设置为 IgnoreQueryString。 - 使用查询字符串:每个唯一的 URL 都有其自己的缓存键。 在 ARM 模板中,使用 
queryStringCachingBehavior 的 UseQueryString。 - 忽略指定的查询字符串:在生成缓存键时,排除参数中指定的查询字符串。 在 ARM 模板中,将 
queryStringCachingBehavior 属性设置为 IgnoreSpecifiedQueryStrings。 - 包括指定的查询字符串:在生成缓存键时,包括参数中指定的查询字符串。 在 ARM 模板中,将 
queryStringCachingBehavior 属性设置为 IncludeSpecifiedQueryStrings。 
  | 
| 查询参数 | 
查询字符串参数名称的列表,用逗号分隔。 仅当“查询字符串缓存行为”设置为“忽略指定的查询字符串”或“包括指定的查询字符串”时才设置此属性。 | 
| Compression | 
- 
              已启用: Front Door 动态在边缘节点压缩内容,从而产生更小、更快的响应。 有关详细信息,请参阅 文件压缩。 在 ARM 模板中,将 
isCompressionEnabled 属性设置为 Enabled。 - Disabled. Front Door 不执行压缩。 在 ARM 模板中,将 
isCompressionEnabled 属性设置为 Disabled。 
  | 
| 缓存行为 | 
- 
              荣誉起源: Front Door 始终遵循源响应标头指令。 如果缺少源指令,Front Door 会缓存 1 到 3 天内任何位置的内容。 在 ARM 模板中,将 
cacheBehavior 属性设置为 HonorOrigin。 - 
              始终重写: 从源返回的 TTL 值将被动作指定的值覆盖。 仅当响应可缓存时才会应用此行为。 在 ARM 模板中,将 
cacheBehavior 属性设置为 OverrideAlways。 - 如果缺少源值则替代:如果没有 TTL 值从源返回,则规则会将 TTL 设置为操作中指定的值。 仅当响应可缓存时才会应用此行为。 在 ARM 模板中,将 
cacheBehavior 属性设置为 OverrideIfOriginMissing。 
  | 
| 缓存持续时间 | 
当 缓存行为 设置为 Override always 或 Override if origin missing设置时,这些字段必须指定要使用的缓存持续时间。 最长持续时间为 366 天。 仅当 缓存行为 设置为 “始终替代 ”或 “重写”(如果源缺失)时,才会设置此属性。- 在 Azure 门户中:指定天数、小时数、分钟数和秒数。
 - 在 ARM 模板中:使用 
cacheDuration 以 d.hh:mm:ss 格式指定持续时间。 
  | 
Examples
在此示例中,我们将所有匹配的请求路由到名为 MyOriginGroup 的源组,而不考虑 Front Door 终结点路由中的配置。
{
  "name": "RouteConfigurationOverride",
  "parameters": {
    "originGroupOverride": {
      "originGroup": {
        "id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.Cdn/profiles/<profile-name>/originGroups/MyOriginGroup"
      },
      "forwardingProtocol": "MatchRequest"
    },
    "cacheConfiguration": null,
    "typeName": "DeliveryRuleRouteConfigurationOverrideActionParameters"
  }
}
{
  name: 'RouteConfigurationOverride'
  parameters: {
    originGroupOverride: {
      originGroup: {
        id: '/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.Cdn/profiles/<profile-name>/originGroups/MyOriginGroup'
      }
      forwardingProtocol: 'MatchRequest'
    }
    cacheConfiguration: null
    typeName: 'DeliveryRuleRouteConfigurationOverrideActionParameters'
  }
}
 
在此示例中,我们将设置缓存键,以包括一个名为 customerId 的查询字符串参数。 将启用压缩,并遵从源的缓存策略。
{
  "name": "RouteConfigurationOverride",
  "parameters": {
    "cacheConfiguration": {
      "queryStringCachingBehavior": "IncludeSpecifiedQueryStrings",
      "queryParameters": "customerId",
      "isCompressionEnabled": "Enabled",
      "cacheBehavior": "HonorOrigin",
      "cacheDuration": null
    },
    "originGroupOverride": null,
    "typeName": "DeliveryRuleRouteConfigurationOverrideActionParameters"
  }
}
{
  name: 'RouteConfigurationOverride'
  parameters: {
    cacheConfiguration: {
      queryStringCachingBehavior: 'IncludeSpecifiedQueryStrings'
      queryParameters: 'customerId'
      isCompressionEnabled: 'Enabled'
      cacheBehavior: 'HonorOrigin'
      cacheDuration: null
    }
    originGroupOverride: null
    typeName: 'DeliveryRuleRouteConfigurationOverrideActionParameters'
  }
}
 
在此示例中,对于尚未指定缓存持续时间的匹配请求,我们将缓存过期时间替代为 6 小时。 Front Door 在确定缓存键时将忽略查询字符串,并将启用压缩。
{
  "name": "RouteConfigurationOverride",
  "parameters": {
    "cacheConfiguration": {
      "queryStringCachingBehavior": "IgnoreQueryString",
      "cacheBehavior": "OverrideIfOriginMissing",
      "cacheDuration": "0.06:00:00",
    },
    "originGroupOverride": null,
    "typeName": "DeliveryRuleRouteConfigurationOverrideActionParameters"
  }
}
{
  name: 'RouteConfigurationOverride'
  parameters: {
    cacheConfiguration: {
      queryStringCachingBehavior: 'IgnoreQueryString'
      cacheBehavior: 'OverrideIfOriginMissing'
      cacheDuration: '0.06:00:00'
    }
    originGroupOverride: null
    typeName: 'DeliveryRuleRouteConfigurationOverrideActionParameters'
  }
}
 
使用修改请求头操作,在请求发送到源时修改请求中的标头。
属性
| Property | 
支持值 | 
| Operator | 
- 
              附加: 指定的标头将添加到具有指定值的请求中。 如果该标头已存在,则会使用字符串串联将该值追加到现有标头值。 无需添加分隔符。 在 ARM 模板中,使用 
headerAction 的 Append。 - 
              改写: 指定的标头将添加到具有指定值的请求中。 如果该标头已存在,则指定的值将替代现有值。 在 ARM 模板中,使用 
headerAction 的 Overwrite。 - 
              删除: 如果规则中指定的标头存在,则标头将从请求中删除。 在 ARM 模板中,使用 
headerAction 的 Delete。 
  | 
| 标题名称 | 
要修改的标头名称。 | 
| 标头值 | 
要追加或覆盖的值。 | 
Example
在此示例中,我们将值 AdditionalValue 追加到 MyRequestHeader 请求标头。 如果原点将响应标头设置为值 ValueSetByClient,则在应用此操作后,请求标头的值将为 ValueSetByClientAdditionalValue。
{
  "name": "ModifyRequestHeader",
  "parameters": {
    "headerAction": "Append",
    "headerName": "MyRequestHeader",
    "value": "AdditionalValue",
    "typeName": "DeliveryRuleHeaderActionParameters"
  }
}
{
  name: 'ModifyRequestHeader'
  parameters: {
    headerAction: 'Append'
    headerName: 'MyRequestHeader'
    value: 'AdditionalValue'
    typeName: 'DeliveryRuleHeaderActionParameters'
  }
}
 
Note
某些 Azure Front Door 保留标头无法通过规则引擎操作进行修改,包括修改请求标头和响应标头的操作。 无法修改以下列表中的保留标头以及前缀为 x-ec 和 x-fd 的任何标头。
Accept-Ranges 
Host 
Connection 
Content-Length 
Transfer-Encoding 
TE 
Last-Modified 
Keep-Alive 
Expect 
Upgrade 
If-Modified-Since 
If-Unmodified-Since 
If-None-Match 
If-Match 
Range 
If-Range 
X-Ms-Via 
X-Ms-Force-Refresh 
X-MSEdge-Ref 
Warning 
Forwarded 
Via 
X-Forwarded-For 
X-Forwarded-Proto 
X-Forwarded-Host 
X-Azure-RequestChain 
X-Azure-FDID 
X-Azure-RequestChainv2 
X-Azure-Ref 
 
使用修改响应头操作来修改响应中存在的标头,然后将它们返回到客户端。
属性
| Property | 
支持值 | 
| Operator | 
- 
              附加: 指定的标头将添加到具有指定值的响应中。 如果该标头已存在,则会使用字符串串联将该值追加到现有标头值。 无需添加分隔符。 在 ARM 模板中,使用 
headerAction 的 Append。 - 
              改写: 指定的标头将添加到具有指定值的响应中。 如果该标头已存在,则指定的值将替代现有值。 在 ARM 模板中,使用 
headerAction 的 Overwrite。 - 
              删除: 如果规则中指定的标头存在,则标头将从响应中删除。  在 ARM 模板中,使用 
headerAction 的 Delete。 
  | 
| 标题名称 | 
要修改的标头名称。 | 
| 标头值 | 
要追加或覆盖的值。 | 
Example
在此示例中,我们先从响应中删除名为 X-Powered-By 的标头,然后再将其返回到客户端。
{
  "name": "ModifyResponseHeader",
  "parameters": {
    "headerAction": "Delete",
    "headerName": "X-Powered-By",
    "typeName": "DeliveryRuleHeaderActionParameters"
  }
}
{
  name: 'ModifyResponseHeader'
  parameters: {
    headerAction: 'Delete'
    headerName: 'X-Powered-By'
    typeName: 'DeliveryRuleHeaderActionParameters'
  }
}
 
Note
某些 Azure Front Door 保留标头无法通过规则引擎操作进行修改,包括修改请求标头和响应标头的操作。 无法修改以下列表中的保留标头以及前缀为 x-ec 和 x-fd 的任何标头。
Accept-Ranges 
Host 
Connection 
Content-Length 
Transfer-Encoding 
TE 
Last-Modified 
Keep-Alive 
Expect 
Upgrade 
If-Modified-Since 
If-Unmodified-Since 
If-None-Match 
If-Match 
Range 
If-Range 
X-Ms-Via 
X-Ms-Force-Refresh 
X-MSEdge-Ref 
Warning 
Forwarded 
Via 
X-Forwarded-For 
X-Forwarded-Proto 
X-Forwarded-Host 
X-Azure-RequestChain 
X-Azure-FDID 
X-Azure-RequestChainv2 
X-Azure-Ref 
 
 URL 重定向
使用URL 重定向操作将客户端重定向到新的 URL。 从 Front Door 向客户端发送重定向响应。 Azure Front Door 支持使用 {url_path:seg#} 服务器变量动态捕获 URL 路径,并通过 {url_path.tolower} 或 {url_path.toupper} 将 URL 路径转换为小写或大写。 有关详细信息,请参阅 服务器变量。
属性
| Property | 
支持值 | 
| 重定向类型 | 
返回给请求者的响应类型。 - 在 Azure 门户中:“已找到”(302)、“已移动”(301)、“临时重定向”(307)、“永久重定向”(308)。
 - 在 ARM 模板中:
Found、Moved、TemporaryRedirect、PermanentRedirect 
  | 
| 重定向协议 | 
- 在 Azure 门户中:
Match Request、HTTP、HTTPS - 在 ARM 模板中:
MatchRequest、Http、Https 
  | 
| 目标主机 | 
要将请求重定向到的主机名。 留空会保留传入主机。 | 
| 目标路径 | 
要在重定向中使用的路径。 包含前导 /。 留空会保留传入路径。 | 
| 查询字符串 | 
重定向中使用的查询字符串。 请勿包含前导 ?。 留空会保留传入的查询字符串。 | 
| 目标片段 | 
要在重定向中使用的片段。 留空会保留传入片段。 | 
Example
在此示例中,我们将请求重定向到 https://contoso.com/exampleredirection?clientIp={client_ip},同时保留片段。 使用 HTTP 临时重定向 (307)。 客户端的 IP 地址被用作 URL 中 {client_ip} 令牌的替代,通过使用 client_ip服务器变量 实现。
{
  "name": "UrlRedirect",
  "parameters": {
    "redirectType": "TemporaryRedirect",
    "destinationProtocol": "Https",
    "customHostname": "contoso.com",
    "customPath": "/exampleredirection",
    "customQueryString": "clientIp={client_ip}",
    "typeName": "DeliveryRuleUrlRedirectActionParameters"
  }
}
{
  name: 'UrlRedirect'
  parameters: {
    redirectType: 'TemporaryRedirect'
    destinationProtocol: 'Https'
    customHostname: 'contoso.com'
    customPath: '/exampleredirection'
    customQueryString: 'clientIp={client_ip}'
    typeName: 'DeliveryRuleUrlRedirectActionParameters'
  }
}
 
 URL 重写
使用 URL 重写 操作用于重写发往源的请求路径。 Azure Front Door 支持使用 {url_path:seg#} 服务器变量动态捕获 URL 路径,并通过 {url_path.tolower} 或 {url_path.toupper} 将 URL 路径转换为小写或大写。 有关详细信息,请参阅 服务器变量。
属性
| Property | 
支持值 | 
| 源模式 | 
定义要替换的 URL 路径中的源模式。 目前,源模式使用基于前缀的匹配。 若要匹配所有 URL 路径,请使用正斜杠(/)作为源模式值。 注意,只为源模式考虑路由配置中要匹配的模式之后的路径。 有关详细信息,请参阅 源模式。 | 
| Destination | 
定义要在重写中使用的目标路径。 目标路径会覆盖源模式。 | 
| 暂留不匹配的路径 | 
如果设置为 “是”,则源模式后剩余的路径将追加到新的目标路径。 | 
Example
在此示例中,我们将所有请求重写到路径 /redirection,并且不保留路径的其余部分。
{
  "name": "UrlRewrite",
  "parameters": {
    "sourcePattern": "/",
    "destination": "/redirection",
    "preserveUnmatchedPath": false,
    "typeName": "DeliveryRuleUrlRewriteActionParameters"
  }
}
{
  name: 'UrlRewrite'
  parameters: {
    sourcePattern: '/'
    destination: '/redirection'
    preserveUnmatchedPath: false
    typeName: 'DeliveryRuleUrlRewriteActionParameters'
  }
}
 
后续步骤