Шлюз приложений Azure перенаправляет "/ *" в бэкэнд-пул - PullRequest
0 голосов
/ 28 июня 2018

У меня установлен шлюз приложений Azure с Маршрутизация на основе пути для маршрутизации между двумя различными внутренними пулами. У меня также есть Application Insights, настроенный на одном из пулов, к которому я вернусь через минуту. Мое правило пути настроено так:

/home/* -> Backend Pool 1 /* -> Backend Pool 2

Мне никогда не удавалось подключиться к Backend Pool 1, но я смог успешно подключиться к Backend Pool 2 на /*, и когда я смог это сделать, переход на /home/* все равно был бы отправлен Backend Pool 2 которого там не было. Я попытался использовать настройку Override Backend Path в настройках HTTP, но тогда ни один маршрут не работал, и я получил ошибку 502 . Естественно, я попытался отменить эту настройку, но ничего не изменилось.

Однако в Application Insights for Backend Pool 2 я заметил, что после удаления параметра Override Backend Path, что пул серверов получал /* как часть запроса и, таким образом, получал ошибка 400 , поскольку этот маршрут не существует и символ не разрешен в URL-адресе (стоит отметить, что мой файл web.config в настоящее время не имеет ограничений символов для URL-адреса запроса).

Я знаю, что этот тип маршрутизации возможен, учитывая количество документов из Azure, но я занимался этой проблемой в течение двух недель и поливал каждый клочок документации и, похоже, никуда не денусь .

Итак, чтобы уточнить, мой конкретный вопрос:

Учитывая то, что я уже пробовал, я что-то упустил в своей конфигурации, что-то не так с моей конфигурацией?

Я был бы более чем рад прояснить любые моменты, которые, по вашему мнению, я пропустил.

EDIT : добавление конфигурации одного правила и его карты путей для контекста.

[
 {
      "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
 }

]

1 Ответ

0 голосов
/ 06 июля 2018

Правила оцениваются в указанном порядке. Возможно, у вас есть базовое правило, предшествующее правилу на основе пути. Это приведет к тому, что основное правило будет перехватывать весь трафик и направлять его в бэкэнд-пул, указанный в этом правиле. Если это не так, то, вероятно, поможет вставка конфигурации правил.

- Edit

Я посмотрел детали вашей конфигурации в нашей системе мониторинга. Это из-за неправильной конфигурации зонда. У вас есть / * в пробах, которые не действительны. Зонд должен указывать на существующую страницу, которая возвращает HTTP-код ответа 200. Также вам не нужно переопределение пути и может быть удалено. После правильной настройки зондов убедитесь, что в отчете о работоспособности бэкэнда все бэкэнд-серверы показаны как исправные. Тогда ваши правила на основе пути будут работать как положено.

...