我有一个使用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/

10-11 02:59