基于 URL 路径的路由概述
通过基于 URL 路径的路由,可根据请求的 URL 路径,将流量路由到后端服务器池。
方案之一是将针对不同内容类型的请求路由到不同的后端服务器池。
在以下示例中,应用程序网关从三个后端服务器池(例如:VideoServerPool、ImageServerPool 和 DefaultServerPool)为 contoso.com 提供流量。
将针对 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 路由规则创建应用程序网关。