你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
规则集操作
Azure Front Door 规则集由具有匹配条件和操作组合的规则组成。 本文详细介绍了可在规则集中使用的操作。 操作定义了应用于匹配条件所识别的请求类型的行为。 在一个规则集中,一个规则最多可以有五个操作。 Front Door 还支持规则集操作中的服务器变量。
以下操作可用于规则集中:
路由配置替代
路由配置替代操作用于替代请求的源组或缓存配置。 您可以选择替代或遵从路由中指定的源组配置。 但是,替代路由配置时,必须配置缓存。 否则,请求的缓存将被禁用。
你还可以针对特定请求替代文件的缓存方式,包括:
- 替代由源指定的缓存行为。
- 使用查询字符串参数生成请求的缓存密钥的方式。
- 生存时间 (TTL) 值,该值控制内容在缓存中保留多长时间。
属性
属性 |
支持的值 |
替代源组 |
- 是:替代用于请求的源组。
- 否:使用路由中指定的源组。
|
Caching |
- 启用:强制为请求启用缓存。
- 禁用:强制为请求禁用缓存。
|
当“替代源组”设置为“是”时,请设置以下属性:
属性 |
支持的值 |
源组 |
请求应路由到的源组。 此设置会替代 Front Door 终结点路由中指定的配置。 |
转发协议 |
Front Door 将请求转发到源时使用的协议。 支持的值为“仅限 HTTP”、“仅限 HTTPS”、“匹配传入的请求”。 此设置会替代 Front Door 终结点路由中指定的配置。 |
当“缓存”设置为“启用”时,请设置以下属性:
属性 |
支持的值 |
查询字符串缓存行为 |
- 忽略查询字符串:生成缓存键时不考虑查询字符串。 在 ARM 模板中,将
queryStringCachingBehavior 属性设置为 IgnoreQueryString 。 - 使用查询字符串:每个唯一的 URL 都有其自己的缓存键。 在 ARM 模板中,使用
UseQueryString 的 queryStringCachingBehavior 。 - 忽略指定的查询字符串:在生成缓存键时,排除参数中指定的查询字符串。 在 ARM 模板中,将
queryStringCachingBehavior 属性设置为 IgnoreSpecifiedQueryStrings 。 - 包括指定的查询字符串:在生成缓存键时,包括参数中指定的查询字符串。 在 ARM 模板中,将
queryStringCachingBehavior 属性设置为 IncludeSpecifiedQueryStrings 。
|
查询参数 |
查询字符串参数名称的列表,用逗号分隔。 仅当“查询字符串缓存行为”设置为“忽略指定的查询字符串”或“包括指定的查询字符串”时才设置此属性。 |
压缩 |
- 启用:Front Door 在边缘动态压缩内容,从而更快地做出响应。 有关详细信息,请参阅文件压缩。 在 ARM 模板中,将
isCompressionEnabled 属性设置为 Enabled 。 - 已禁用。 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 天。 如果值为 0 秒,则 CDN 会缓存内容,但必须在源服务器上重新验证每个请求。 仅当“缓存行为”设置为“始终替代”或“如果缺少源值则替代”时才设置此属性。- 在 Azure 门户中:指定天数、小时数、分钟数和秒数。
- 在 ARM 模板中:使用
cacheDuration 以 d.hh:mm:ss 格式指定持续时间。
|
示例
在此示例中,我们将所有匹配的请求路由到名为 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'
}
}
使用修改请求头操作,在请求发送到源时修改请求中的标头。
属性
属性 |
支持的值 |
运算符 |
- 追加:将指定的标头添加到具有指定值的请求中。 如果该标头已存在,则会使用字符串串联将该值追加到现有标头值。 无需添加分隔符。 在 ARM 模板中,使用
Append 的 headerAction 。 - 覆盖:将指定的标头添加到具有指定值的请求中。 如果该标头已存在,则指定的值将替代现有值。 在 ARM 模板中,使用
Overwrite 的 headerAction 。 - 删除:如果规则中指定的标头已存在,则会从请求中删除该标头。 在 ARM 模板中,使用
Delete 的 headerAction 。
|
标头名称 |
要修改的标头名称。 |
标头值 |
要追加或覆盖的值。 |
示例
在此示例中,我们将值 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'
}
}
使用修改响应头操作来修改响应中存在的标头,然后将它们返回到客户端。
属性
属性 |
支持的值 |
运算符 |
- 追加:将指定的标头添加到具有指定值的响应中。 如果该标头已存在,则会使用字符串串联将该值追加到现有标头值。 无需添加分隔符。 在 ARM 模板中,使用
Append 的 headerAction 。 - 覆盖:将指定的标头添加到具有指定值的响应中。 如果该标头已存在,则指定的值将替代现有值。 在 ARM 模板中,使用
Overwrite 的 headerAction 。 - 删除:如果规则中指定的标头已存在,则会从响应中删除该标头。 在 ARM 模板中,使用
Delete 的 headerAction 。
|
标头名称 |
要修改的标头名称。 |
标头值 |
要追加或覆盖的值。 |
示例
在此示例中,我们先从响应中删除名为 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'
}
}
URL 重定向
使用 URL 重定向操作可将客户端重定向到新 URL。 从 Front Door 向客户端发送重定向响应。
属性
属性 |
支持的值 |
重定向类型 |
要返回给请求方的响应类型。 - 在 Azure 门户中:“已找到”(302)、“已移动”(301)、“临时重定向”(307)、“永久重定向”(308)。
- 在 ARM 模板中:
Found 、Moved 、TemporaryRedirect 、PermanentRedirect
|
重定向协议 |
- 在 Azure 门户中:
Match Request 、HTTP 、HTTPS - 在 ARM 模板中:
MatchRequest 、Http 、Https
|
目标主机 |
要将请求重定向到的主机名。 留空会保留传入主机。 |
目标路径 |
要在重定向中使用的路径。 包含前导 / 。 留空会保留传入路径。 |
查询字符串 |
重定向中使用的查询字符串。 请勿包含前导 ? 。 留空会保留传入的查询字符串。 |
目标片段 |
要在重定向中使用的片段。 留空会保留传入片段。 |
示例
在此示例中,我们将请求重定向到 https://contoso.com/exampleredirection?clientIp={client_ip}
,同时保留片段。 使用 HTTP 临时重定向 (307)。 客户端的 IP 地址通过使用 client_ip
服务器变量来代替 URL 中的 {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 重写操作可以重写路由到原点的请求的路径。
属性
属性 |
支持的值 |
源模式 |
定义要替换的 URL 路径中的源模式。 当前,源模式使用基于前缀的匹配。 若要匹配所有 URL 路径,请使用正斜杠(/ )作为源模式值。 |
目标 |
定义要在重写中使用的目标路径。 目标路径会覆盖源模式。 |
暂留不匹配的路径 |
如果设置为“是”,则会将源模式后面的剩余路径追加到新的目标路径。 |
示例
在此示例中,我们将所有请求重写到路径 /redirection
,并且不保留路径的其余部分。
{
"name": "UrlRewrite",
"parameters": {
"sourcePattern": "/",
"destination": "/redirection",
"preserveUnmatchedPath": false,
"typeName": "DeliveryRuleUrlRewriteActionParameters"
}
}
{
name: 'UrlRewrite'
parameters: {
sourcePattern: '/'
destination: '/redirection'
preserveUnmatchedPath: false
typeName: 'DeliveryRuleUrlRewriteActionParameters'
}
}
在 Azure Front Door(经典)中,一个规则引擎最多由 25 个规则组成,其中包含匹配条件和关联操作。 本文详细说明了可以在规则中定义的各项操作。
操作定义了要应用于一个或一组匹配条件的请求类型的行为。 在规则引擎配置中,一个规则最多可以有 10 个匹配条件和 5 个操作。 一个规则中只能有一个替代路由配置操作。
可在规则引擎配置中使用以下操作。
使用这些操作可以修改发送到后端的请求中提供的标头。
Required fields
操作 |
HTTP 标头名称 |
值 |
附加 |
如果选择此选项并且规则匹配,则会将“标头名称”中指定的标头添加到请求并使用指定的值。 如果该标头已存在,则会将该值追加到现有值后面。 |
字符串 |
Overwrite |
如果选择此选项并且规则匹配,则会将“标头名称”中指定的标头添加到请求并使用指定的值。 如果该标头已存在,则指定的值将替代现有值。 |
字符串 |
删除 |
如果选择此选项,规则匹配,并且在规则中指定的标头存在,则会从请求中删除该标头。 |
字符串 |
使用这些操作可以修改返回给客户端的响应中提供的标头。
Required fields
操作 |
HTTP 标头名称 |
值 |
附加 |
如果选择此选项并且规则匹配,则会通过使用指定的值将“标头名称”中指定的标头添加到响应 。 如果该标头已存在,则会将该“值”追加到现有值后面。 |
字符串 |
Overwrite |
如果选择此选项并且规则匹配,则会将“标头名称”中指定的标头添加到响应并使用指定的“值” 。 如果该标头已存在,则该“值”将替代现有值。 |
字符串 |
删除 |
如果选择此选项,规则匹配,并且在规则中指定的标头存在,则会从响应中删除该标头。 |
字符串 |
路由配置替代
路由类型:重定向
使用这些操作可将客户端重定向到一个新 URL。
Required fields
字段 |
说明 |
重定向类型 |
重定向是一种将用户/客户端从一个 URL 发送到另一个 URL 的方式。 重定向类型会设置客户端使用的状态代码,以便理解重定向的目的。
可以选择以下重定向状态代码:已找到 (302)、已移动 (301)、临时重定向 (307) 和永久重定向 (308)。 |
重定向协议 |
根据传入请求保留协议,或者为重定向定义一个新协议。 例如,为 HTTP 到 HTTPS 的重定向选择“HTTPS”。 |
目标主机 |
设置此值可更改 URL 中用于重定向的主机名,或者保留传入请求中的主机名。 |
目标路径 |
根据传入请求保留路径,或者为重定向更新 URL 中的路径。 |
查询字符串 |
设置此值可替换传入请求 URL 中的任何现有查询字符串,或者保留查询字符串原始集。 |
目标片段 |
目标片段是“#”之后的 URL 部分,浏览器通常使用该段登录到页面的特定部分。 设置此值可将片段添加到重定向 URL。 |
路由类型:前进
使用这些操作可将客户端转发到新 URL。 这些操作还包含用于 URL 重写和缓存的子操作。
字段 |
说明 |
后端池 |
选择要替代和服务请求的后端池,可以看到当前在 Front Door 配置文件中的所有预配置的后端池。 |
转发协议 |
此协议用于将请求转发到后端或匹配来自传入请求的协议。 |
URL 重写 |
在构造要转发到后端的 URL 重写请求时使用的路径。 |
缓存 |
为此传递规则启用缓存。 启用后,Azure Front Door 会缓存静态内容。 |
URL 重写
使用此设置可以配置可选的“自定义转发路径”,以便在构造要转发到后端的请求时使用。
字段 |
说明 |
自定义转发路径 |
定义将请求转发到的路径。 |
Caching
使用这些设置来控制为包含查询字符串的请求缓存文件的方式。 是否根据所有参数或所选参数来缓存内容。 可以使用这些设置来覆盖生存时间 (TTL) 值,以控制内容在缓存中保留多长时间。 若要将缓存作为一项操作强制执行,请将“缓存”字段设置为“已启用”。强制缓存时,会出现以下选项:
缓存行为 |
说明 |
忽略查询字符串 |
缓存资产后,所有后续请求将忽略查询字符串,直至缓存的资产过期。 |
使用查询字符串 |
具有唯一 URL 的每个请求(包括查询字符串)将被视为具有其自己的缓存的唯一资产。 |
忽略指定的查询字符串 |
缓存时将忽略在“查询参数”设置中列出的请求 URL 查询字符串。 |
包括指定的查询字符串 |
缓存时将使用“查询参数”设置中列出的请求 URL 查询字符串。 |
其他字段 |
说明 |
动态压缩 |
Front Door 可在边缘动态压缩内容,从而更快地做出响应。 |
查询参数 |
允许/禁止的参数的逗号分隔列表,用作缓存的基础。 |
使用默认缓存持续时间 |
设置为使用 Azure Front Door 默认缓存持续时间,或定义将忽略源响应指令的缓存持续时间。 |
后续步骤