Устранение неполадок с сходством сеансов шлюза приложений Azure

Сводка

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

Замечание

Используйте модуль Azure Az PowerShell для взаимодействия с Azure. Сведения о начале работы см. в разделе Install Azure PowerShell. Сведения о миграции в модуль Az PowerShell см. в статье Migrate Azure PowerShell из AzureRM в Az.

Обзор

Функция сопоставления сеансов на основе файлов cookie полезна для сохранения сеанса пользователя на одном сервере. С помощью файлов cookie, управляемых шлюзом приложений, Шлюз приложений направляет последующий трафик из сеанса пользователя на тот же сервер для обработки. Эта функция важна в случаях, когда состояние сеанса сохраняется локально на сервере для сеанса пользователя. Сходство сеансов также называется липкими сеансами.

Замечание

Шлюз приложений версии 1 использует файл cookie с именем ARRAffinity для перенаправления трафика к одному члену внутреннего пула. В Шлюзе приложений версии 2 этот файл cookie переименован в ApplicationGatewayAffinity. В целях этого документа ApplicationGatewayAffinity используется в качестве примера. ARRAffinity можно заменить, где это применимо для экземпляров Шлюза приложений версии 1.

Возможные причины проблем

Проблемы с поддержанием сеансовой аффинити на основе файлов cookie могут возникать по следующим причинам:

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

Проблемы с сходством сеансов могут возникнуть, если вы забыли включить параметр сопоставления на основе файлов cookie. Чтобы проверить, включена ли настройка сопоставления на основе файлов cookie на вкладке "Параметры серверной части" на портале Azure, выполните следующие действия.

  1. Войдите на портал Azure.

  2. В области навигации слева выберите "Все ресурсы". Выберите имя шлюза приложений в колонке "Все ресурсы ". Если выбранная подписка уже содержит несколько ресурсов, введите имя шлюза приложений в поле "Фильтр по имени..." , чтобы легко получить доступ к шлюзу приложений.

  3. Перейдите на вкладку "Параметры серверной части " в разделе SETTINGS.

    Снимок экрана: портал Azure с параметрами и параметрами серверной части, выбранными для шлюза приложений.

  4. Выберите параметр серверной части. При добавлении параметра серверной части проверьте, включена ли привязка на основе файлов cookie.

    Снимок экрана: параметры серверной части, показывающие сходство на основе файлов cookie, выбранное в шлюзе приложений.

Чтобы проверить, установлено ли значение CookieBasedAffinity на Enabled в разделе BackendHttpSettingsCollection, используйте один из следующих методов:

"cookieBasedAffinity": "Enabled", 

Причина

Шлюз приложений может реализовать сеансовую привязку только с помощью куки.

Обходной путь

Если приложение не может обрабатывать сходство на основе файлов cookie, необходимо использовать внешнюю или внутреннюю Azure подсистему балансировки нагрузки или другое стороннее решение.

Симптом

Вы включите параметр сопоставления на основе файлов cookie. При доступе к шлюзу приложений с использованием короткого URL в Internet Explorer, например http://website, запрос всё равно передаётся между серверными системами.

Чтобы определить эту проблему, выполните следующие инструкции.

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

  2. Проверьте и проанализируйте журналы сеансов, чтобы определить, содержат ли файлы cookie, предоставляемые клиентом, детали ApplicationGatewayAffinity. Если вы не найдете сведения о ApplicationGatewayAffinity, например ApplicationGatewayAffinity=ApplicationGatewayAffinityValue в наборе файлов cookie, клиент не отвечает с файлом cookie ApplicationGatewayAffinity, который предоставляет шлюз приложений. Рассмотрим пример.

    Снимок экрана: журнал сеансов с выделенной одной записью.

    Снимок экрана: заголовки HTTP-запроса с выделенными сведениями о файлах cookie.

Приложение продолжает пытаться задать файл cookie для каждого запроса, пока он не получит ответ.

Причина

Эта проблема возникает, так как Internet Explorer и другие браузеры не хранят или не используют файл cookie с коротким URL-адресом имени.

Резолюция

Чтобы устранить эту проблему, перейдите к шлюзу приложений с помощью полного доменного имени (FQDN). Например, воспользуйтесь http://website.com или http://appgw.website.com.

Дополнительные журналы для устранения неполадок

Вы можете собирать и анализировать дополнительные журналы для устранения неполадок, связанных с сходством сеансов на основе файлов cookie.

Анализ журналов Шлюза приложений

Чтобы собрать журналы шлюза приложений, выполните следующие инструкции.

Включите ведение журнала с помощью портала Azure.

  1. На портале Azure найдите ресурс и выберите Diagnostic setting.

    Для Шлюз приложений доступны три журнала: журнал доступа, журнал производительности и журнал брандмауэра.

  2. Выберите "Добавить параметр диагностики ", чтобы начать сбор данных.

    Снимок экрана: шлюз приложений с выбранными параметрами диагностики.

  3. Страница параметров диагностики предоставляет параметры для журналов диагностики. В этом примере Log Analytics хранит журналы. Вы также можете использовать Центры событий Azure и учетную запись хранения для сохранения журналов диагностики.

    Снимок экрана: область параметров диагностики с выбранной конфигурацией Log Analytics.

  4. Подтвердите параметры и нажмите кнопку "Сохранить".

Использование веб-отладчика для записи и анализа трафика HTTP или HTTPS

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

Используйте тот веб-отладчик, который желаете. В этом примере используйте Fiddler для записи и анализа трафика HTTP или HTTPS. Следуйте инструкциям.

  1. Скачайте Fiddler.

    Замечание

    Выберите Fiddler4, если на компьютере, на котором производится запись, установлена .NET 4. В противном случае выберите Fiddler2.

  2. Щелкните правой кнопкой мыши исполняемый файл установки и запустите от имени администратора для установки.

    Снимок экрана программы установки Fiddler с выбранной опцией Выполнить от имени администратора.

  3. При открытии Fiddler автоматически начинается захват трафика (обратите внимание на захват в нижнем левом углу). Нажмите клавишу F12, чтобы запустить или остановить запись трафика.

    Снимок экрана веб-отладчика Fiddler с выделенным индикатором захвата.

  4. Скорее всего, вы заинтересованы в расшифрованном трафике HTTPS. Включите расшифровку HTTPS, выбрав Инструменты>Параметры Fiddler и установив флажок Расшифровать трафик HTTPS.

    Снимок экрана: параметры Fiddler с выбранным параметром HTTPS и включенной функцией расшифровки трафика HTTPS.

  5. Чтобы удалить предыдущие несвязанные сеансы перед воспроизведением проблемы, нажмите кнопку "Удалить>все".

    Снимок экрана: меню X в Fiddler с выбранным параметром

  6. При воспроизведении проблемы сохраните файл для проверки, выбрав Файл>Сохранить>Все сеансы.

    Снимок экрана: меню

  7. Проверьте и проанализируйте журналы сеансов, чтобы определить, что такое проблема.

    Рассмотрим пример.

  • Пример A: Вы находите журнал сеансов, где запрос отправляется от клиента и направляется к общедоступному IP-адресу шлюза приложений. Выберите этот журнал, чтобы просмотреть сведения. В правой части данные в нижнем поле — это то, что шлюз приложений возвращает клиенту. Выберите вкладку RAW и определите, получает ли клиент файл cookie с параметрами "Set-Cookie: ApplicationGatewayAffinity=ApplicationGatewayAffinityValue". Если файл cookie отсутствует, сопоставление сеансов не задано или Application Gateway не отправляет cookie обратно клиенту.

    Замечание

    Это значение ApplicationGatewayAffinity — это идентификатор cookie, который шлюз приложений устанавливает для клиента, чтобы передавать его на определенный сервер.

    Снимок экрана: сведения о записи журнала с выделенным значением Set-Cookie.

  • Пример B: Следующий журнал сеансов, который следует за предыдущим, показывает ответ клиента через шлюз для приложений, что устанавливает ApplicationGatewayAffinity. Если идентификатор cookie-идентификатора ApplicationGatewayAffinity совпадает, пакет переходит на тот же внутренний сервер, который использовался ранее. Проверьте следующие несколько строк http-связи, чтобы узнать, изменяется ли файл cookie ApplicationGatewayAffinity клиента.

    Снимок экрана со сведениями о записи лога и выделенным значением cookie.

Замечание

Для того же сеанса обмена данными файл cookie не должен изменяться. Установите верхний флажок справа и выберите вкладку "Файлы cookie", чтобы проверить, использует ли клиент cookie и отправляет ли его обратно в Application Gateway. В противном случае браузер клиента не сохраняет или не использует файл cookie для сеансов связи. Иногда клиент может обманывать.