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'
}
}
后续步骤