我有一个使用Path-Based routing设置的Azure应用程序网关,可以在两个不同的后端池之间进行路由。我还在其中一个池上配置了Application Insights,稍后我将再次介绍。我的路径规则配置如下:/home/* -> Backend Pool 1/* -> Backend Pool 2
我从来没有能够连接到Backend Pool 1
,但是,我已经能够成功地连接到Backend Pool 2
上的/*
,当我能够做到这一点时,转到/home/*
仍将发送到那里不存在的Backend Pool 2
。我尝试在“HTTP设置”上使用Override Backend Path
设置,但是这两种路由均不起作用,并且会收到 502 错误。很自然地,我试图逆转该设置,但是什么也不会改变。
但是,我确实在Application Insights中的Backend Pool 2
中注意到,删除Override Backend Path
设置后,服务器池将/*
接收为请求的一部分,因此,由于该路由不存在且该字符不存在,因此收到 400 错误不允许在URL中使用(值得注意的是,我的web.config文件目前没有请求URL字符限制)。
我知道,鉴于来自Azure的文档数量,这种类型的路由是可行的,但是我已经处理了两个星期的问题,并且遍历了所有文档碎片,而且似乎一无所获。
为了澄清,我的具体问题是:
鉴于我已经尝试过的东西,我是否在配置中丢失了某些东西,我的配置有问题吗?
我很乐意澄清您觉得我遗漏的任何观点。
编辑:添加一个规则的配置及其上下文的路径映射。
[
{
"backendAddressPool": null,
"backendHttpSettings": null,
"etag": "<####>",
"httpListener": {
"id": "<####>",
"resourceGroup": "<####>"
},
"id": "<####>",
"name": "HttpsPaths",
"provisioningState": "Succeeded",
"redirectConfiguration": null,
"resourceGroup": "<####>",
"ruleType": "PathBasedRouting",
"type": null,
"urlPathMap": {
"defaultBackendAddressPool": {
"id": "<####>/backendPool1",
"resourceGroup": "<####>"
},
"defaultBackendHttpSettings": {},
"defaultRedirectConfiguration": null,
"etag": "<####>",
"id": "<####>",
"name": "HttpsPaths",
"pathRules": [
{
"backendAddressPool": {
"id": "<####>/backendPool1"
},
"backendHttpSettings": {
"id": "<####>/OverrideBackendPathSettings (redirects to '/' on the backend)",
"resourceGroup": "<####>"
},
"etag": "<####>",
"id": "<#####>",
"name": "home",
"paths": [
"/home/*"
],
"provisioningState": "Succeeded",
"redirectConfiguration": null,
"resourceGroup": "<####>",
"type": null
},
{
"backendAddressPool": {
"id": "<####>/BackendPool2",
"resourceGroup": "<####>"
},
"backendHttpSettings": {
"id": "<####>/appGatewayBackendHttpSettings (sends request as is)",
"resourceGroup": "<####>"
},
"etag": "<####>",
"id": "<####>/gryphon",
"name": "gryphon",
"paths": [
"/*"
],
"provisioningState": "Succeeded",
"redirectConfiguration": null,
"resourceGroup": "<####>",
"type": null
}
],
"provisioningState": "Succeeded",
"resourceGroup": "<####>",
"type": null
},
"provisioningState": "Succeeded",
"resourceGroup": "<####>",
"type": null
}
]
最佳答案
规则按照指定顺序进行评估。可能是您在基于路径的规则之前有一个基本规则。这将导致基本规则拦截所有流量,并路由到该规则中指定的后端池。如果不是这种情况,则粘贴规则配置可能会有所帮助。
-
编辑
我在我们的监控系统中查看了您的配置详细信息。这是因为探针配置错误。您在/ *探针中无效。探针应指向返回200 http响应代码的现有页面。另外,您不需要路径替代,可以将其删除。正确配置探针后,请确保后端运行状况报告将所有后端服务器显示为正常。然后,基于路径的规则将按预期工作。
关于azure - Azure应用程序网关将“/*”转发到后端池,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51087261/