基于 URL 路径的路由概述

通过基于 URL 路径的路由,可根据请求的 URL 路径,将流量路由到后端服务器池。

方案之一是将针对不同内容类型的请求路由到不同的后端服务器池。

在以下示例中,应用程序网关从三个后端服务器池(例如:VideoServerPool、ImageServerPool 和 DefaultServerPool)为 contoso.com 提供流量。

imageURLroute

将针对 http://contoso.com/video/* 的请求路由到 VideoServerPool,将针对 http://contoso.com/images/* 的请求路由到 ImageServerPool。 如果没有任何路径模式匹配,则选择 DefaultServerPool。

注意

在路由请求时,完整 URL 路径将发送到后端池。 如果请求的资源位于其他路径上(例如,如果请求 http://contoso.com/video/* 要求从 VideoServerPool 后面的网站根目录提供视频),则还需要配置“URL 重写规则”,或在后端设置中重写后端路径

重要

对于 v1 和 v2 SKU,规则是按照它们在门户中列出的顺序处理的。 当创建路径规则时,最佳做法是在最后使用最不具体的路径(带有通配符的路径)。 如果通配符位于顶部,那么即使在后续路径规则中存在更具体的匹配项,它们也具有优先权。

如果基本侦听器先列出并且与传入请求匹配,则该侦听器将处理该请求。 但我们强烈建议先配置多站点侦听器,再配置基本侦听器。 这确保将流量路由到适当的后端。

UrlPathMap 配置元素

UrlPathMap 元素用于指定后端服务器池映射的路径模式。 以下代码示例是模板文件中 urlPathMap 元素的代码片段。

"urlPathMaps": [{
    "name": "{urlpathMapName}",
    "id": "/subscriptions/{subscriptionId}/../microsoft.network/applicationGateways/{gatewayName}/urlPathMaps/{urlpathMapName}",
    "properties": {
        "defaultBackendAddressPool": {
            "id": "/subscriptions/    {subscriptionId}/../microsoft.network/applicationGateways/{gatewayName}/backendAddressPools/{poolName1}"
        },
        "defaultBackendHttpSettings": {
            "id": "/subscriptions/{subscriptionId}/../microsoft.network/applicationGateways/{gatewayName}/backendHttpSettingsCollection/{settingname1}"
        },
        "pathRules": [{
            "name": "{pathRuleName}",
            "properties": {
                "paths": [
                    "{pathPattern}"
                ],
                "backendAddressPool": {
                    "id": "/subscriptions/{subscriptionId}/../microsoft.network/applicationGateways/{gatewayName}/backendAddressPools/{poolName2}"
                },
                "backendHttpsettings": {
                    "id": "/subscriptions/{subscriptionId}/../microsoft.network/applicationGateways/{gatewayName}/backendHttpSettingsCollection/{settingName2}"
                }
            }
        }]
    }
}]

PathPattern

PathPattern 是要匹配的路径模式列表。 每个路径必须以 / 开头,可以使用 * 作为通配符。 发送到路径匹配器的字符串不会在第一个 ?# 之后包含任何文本,这些字符在这里是不允许的。 否则,URL 中允许的任何字符在 PathPattern 中都是允许的。

路径规则不区分大小写。

路径模式 是否支持?
/images/*
/images*
/images/*.jpg
/*.jpg
/Repos/*/Comments/*
/CurrentUser/Comments/*

路径规则的处理顺序取决于它们在门户中的列出方式。 最不具体的路径(带通配符)应位于列表的末尾,以便最后处理。 如果通配符规则位于列表顶部,则优先处理它们。 请参阅以下示例场景。

示例

使用通配符 (*) 时基于路径的规则处理:

示例 1:

/master-dev* to contoso.com

/master-dev/api-core/ to fabrikam.com

/master-dev/* to microsoft.com

由于通配符路径 /master-dev* 位于更精细的路径之上,因此包含 /master-dev 的所有客户端请求将路由到 contoso.com(包括特定的 /master-dev/api-core/)。 为确保将客户端请求路由到适当的路径,关键是要在通配符路径上方具有精细的路径。

示例 2:

/ (default) to contoso.com

/master-dev/api-core/ to fabrikam.com

/master-dev/api to bing.com

/master-dev/* to microsoft.com

所有具有路径模式 /master-dev/* 的客户端请求都按所列顺序进行处理。 如果路径规则中没有任何匹配项,则请求将路由到默认目标。

有关详细信息,请参阅使用基于 URL 的路由的资源管理器模板

PathBasedRouting 规则

PathBasedRouting 类型的 RequestRoutingRule 可用于将侦听器绑定到 urlPathMap。 此侦听器收到的所有请求会根据 urlPathMap 中指定的策略进行路由。 PathBasedRouting 规则的代码段:

"requestRoutingRules": [
    {

"name": "{ruleName}",
"id": "/subscriptions/{subscriptionId}/../microsoft.network/applicationGateways/{gatewayName}/requestRoutingRules/{ruleName}",
"properties": {
    "ruleType": "PathBasedRouting",
    "httpListener": {
        "id": "/subscriptions/{subscriptionId}/../microsoft.network/applicationGateways/{gatewayName}/httpListeners/<listenerName>"
    },
    "urlPathMap": {
        "id": "/subscriptions/{subscriptionId}/../microsoft.network/applicationGateways/{gatewayName}/urlPathMaps/{urlpathMapName}"
    }

}
    }
]

后续步骤

了解基于 URL 的内容路由之后,请转到使用基于 URL 的路由创建应用程序网关,使用 URL 路由规则创建应用程序网关。