Solucionar problemas de afinidade da sessão do Gateway de Aplicativo do Azure

Saiba como diagnosticar e resolver problemas de afinidade de sessão com o Gateway de Aplicativo do Azure.

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Visão geral

O recurso de afinidade de sessão baseada em cookies é útil para manter uma sessão de usuário no mesmo servidor. Usando cookies gerenciados pelo gateway, o Gateway de Aplicativo pode direcionar o tráfego seguinte de uma sessão de usuário para o mesmo servidor para processamento. Isso é importante em casos em que o estado de sessão é salvo localmente no servidor para uma sessão de usuário. A afinidade de sessão também é conhecida como sessões permanentes.

Observação

O Application Gateway v1 emite um cookie chamado ARRAffinity, que é usado para direcionar o tráfego para o mesmo membro do pool de back-end. No gateway de aplicativo v2, esse cookie foi renomeado para ApplicationGatewayAffinity. Para os fins deste documento, ApplicationGatewayAffinity será usado como um exemplo, ARRAffinity pode ser substituído em onde aplicável para instâncias do gateway de aplicativo v1.

Possíveis causas para o problema

O problema na manutenção da afinidade de sessão baseada em cookies pode ocorrer devido a estes principais motivos:

  • A configuração de "afinidade baseada em cookie" não está habilitada
  • Seu aplicativo não pode manipular a afinidade baseada em cookie
  • O aplicativo está usando a afinidade baseada em cookie, mas as solicitações ainda estão oscilando entre os servidores back-end

Às vezes, podem ocorrer problemas de afinidade de sessão quando a configuração de "afinidade com base em cookie" não está habilitada. Para determinar se você habilitou a configuração de "afinidade baseada em cookie", na guia Configurações de HTTP, no portal do Azure, siga estas instruções:

  1. Faça logon no portal do Azure.

  2. No painel de navegação esquerdo, clique em Todos os recursos. Clique no nome do gateway de aplicativo na folha Todos os recursos. Se a assinatura que você selecionou já contiver vários recursos, insira o nome do gateway de aplicativo na caixa Filtrar por nome para acessar com facilidade o gateway de aplicativo.

  3. Selecione a guia configurações de HTTP em CONFIGURAÇÕES.

    Screenshot shows SETTINGS with H T T P settings selected.

  4. Selecione a configuração HTTP e na página Adicionar configuração HTTP, verifique se a Afinidade baseada em cookie está habilitada.

    Screenshot shows the gateway settings for an app gateway, including whether Cookie based affinity is selected.

Você também pode verificar se o valor de "CookieBasedAffinity" está definido como Habilitadoem "backendHttpSettingsCollection" usando um dos seguintes métodos:

"cookieBasedAffinity": "Enabled", 

Causa

O gateway de aplicativo só pode executar a afinidade baseada em sessão usando um cookie.

Solução alternativa

Se o aplicativo não puder lidar com a afinidade baseada em cookie, você deverá usar um balanceador de carga do Azure externo ou interno ou outra solução de terceiros.

Sintoma

Você habilitou a configuração Afinidade baseada em Cookie ao acessar o Gateway de Aplicativo usando uma URL de nome curto no Internet Explorer, por exemplo, http://website, e a solicitação ainda está oscilando entre servidores back-end.

Para identificar esse problema, siga as instruções:

  1. Faça um rastreamento do depurador da web no "Cliente" que está se conectando ao aplicativo atrás do Gateway de Aplicativo (estamos usando o Fiddler neste exemplo). Dica Se não souber usar o Fiddler, marque a opção "Quero coletar o tráfego de rede e analisá-lo usando o depurador da Web" na parte inferior.

  2. Verifique e analise os logs de sessão para determinar se os cookies fornecidos pelo cliente têm os detalhes de ApplicationGatewayAffinity. Caso não encontre os detalhes de ARRAffinity, como "ApplicationGatewayAffinity=ApplicationGatewayAffinityValue" dentro do conjunto de cookies, significa que o cliente não está respondendo com o cookie ApplicationGatewayAffinity, que é fornecido pelo Gateway de Aplicativo. Por exemplo:

    Screenshot shows a session log with a single entry highlighted.

    Screenshot shows request headers for H T T P, including cookie information.

O aplicativo continua tentando definir o cookie em cada solicitação até receber a resposta.

Causa

Esse problema ocorre porque o Internet Explorer e outros navegadores podem não armazenar nem usar o cookie com uma URL de nome curto.

Resolução

Para corrigir esse problema, acesse o Gateway de Aplicativo usando um FQDN. Por exemplo, use http://website.com ou http://appgw.website.com.

Logs adicionais para solucionar problemas

Você pode coletar logs adicionais e analisá-los para solucionar problemas relacionados à afinidade de sessão baseada em cookies

Analisar logs do Gateway de Aplicativo do Azure

Para coletar os logs do Gateway de Aplicativo, siga estas instruções:

Habilitar o registro em log usando o portal do Azure.

  1. No portal do Azure, encontre o recurso e selecione a Configurações de diagnóstico.

    No Gateway de Aplicativo, três logs estão disponíveis: log de Acesso, log de Desempenho e log de Firewall.

  2. Para começar a coletar dados, selecione Adicionar configuração de diagnóstico.

    Screenshot shows an application gateway with Diagnostics settings selected.

  3. A página Configurações de diagnóstico fornece as configurações dos logs de diagnóstico. Neste exemplo, o Log Analytics armazena os logs. Você também pode usar os hubs de eventos e uma conta de armazenamento para salvar os logs de diagnóstico.

    Screenshot shows the Diagnostics settings pane with Log Analytics Configure selected.

  4. Confirme as configurações e selecione em Salvar.

Usar o depurador da Web para capturar e analisar os tráfegos HTTP ou HTTPS

Ferramentas de depuração da Web, como o Fiddler, podem ajudar você a depurar aplicativos da Web, capturando o tráfego de rede entre a Internet e os computadores de teste. Essas ferramentas permitem inspecionar dados de entrada e saída à medida que o navegador os recebe/envia. O Fiddler, neste exemplo, tem a opção HTTP replay (ou reprodução de HTTP) que pode ajudar você a solucionar problemas do lado do cliente com aplicativos Web, especialmente para problemas relacionados a autenticação.

Use o depurador da Web de sua escolha. Neste exemplo, usaremos o Fiddler para capturar e analisar o tráfego http ou https. Para isso, siga estas instruções:

  1. Baixe o Fiddler.

    Observação

    Escolha Fiddler4 se o computador de captura tiver o .NET 4 instalado. Caso contrário, escolha Fiddler2.

  2. Clique com o botão direito do mouse no arquivo de instalação e execute-o como administrador para instalá-lo.

    Screenshot shows the Fiddler setup program with a contextual menu with Run as administrator selected.

  3. Quando você abrir o Fiddler, ele deverá iniciar automaticamente a captura de tráfego (Observe a captura no canto inferior esquerdo). Pressione F12 para iniciar ou parar a captura de tráfego.

    Screenshot shows the Fiddler Web Debugger with the Capturing indicator highlighted.

  4. Você provavelmente terá mais interesse no tráfego HTTPS descriptografado e pode ativar a descriptografia HTTPS selecionando Ferramentas>Opções do Fiddler e marcando a caixa "Descriptografar tráfego HTTPS".

    Screenshot shows Options in Fiddler with H T T P selected and Decrypt HTTPS traffic selected.

  5. Você pode remover sessões anteriores não relacionadas antes de reproduzir o problema clicando em X (ícone) >Remover Tudo conforme indica a seguinte captura de tela:

    Screenshot shows the X icon selected, which displays the Remove all option.

  6. Depois de reproduzir o problema, salve o arquivo para revisão selecionando Arquivo>Salvar>Todas as Sessões..

    Screenshot shows the File Save All Sessions option selected.

  7. Verifique e analise os logs de sessão para determinar qual é o problema.

    Por exemplo:

  • Exemplo A: você encontrou um log de sessão cuja solicitação foi enviada do cliente para o endereço IP público do Gateway de Aplicativo, clique nesse log para exibir os detalhes. No lado direito, os dados na caixa inferior mostram o que o Gateway de Aplicativo está retornando ao cliente. Selecione a guia "RAW" e determine se o cliente está recebendo um "Set-Cookie: ApplicationGatewayAffinity=ApplicationGatewayAffinityValue". Se não houver nenhum cookie, a afinidade de sessão não estará definida ou o Gateway de Aplicativo não estará aplicando o cookie de volta para o cliente.

    Observação

    O valor de ApplicationGatewayAffinity é a cookie-id que o Gateway de Aplicativo define para que o cliente seja enviado a um servidor back-end específico.

    Screenshot shows an example of details of a log entry with the Set-Cookie value highlighted.

  • Exemplo B: o próximo log de sessão seguido pelo anterior é o cliente que responde de volta ao Gateway de Aplicativo, que definiu o ARRAAFFINITY. Se a cookie-id de ApplicationGatewayAffinity for correspondente, o pacote deverá ser enviado ao mesmo servidor back-end usado anteriormente. Verifique as várias linhas seguintes da comunicação http para ver se o cookie ApplicationGatewayAffinity do cliente está sendo alterado.

    Screenshot shows an example of details of a log entry with a cookie highlighted.

Observação

O cookie não deve ser alterado na mesma sessão de comunicação. Marque a caixa superior no lado direito e selecione a guia "Cookies" para verificar se o cliente está usando o cookie e enviando-o de volta para o Gateway de Aplicativo. Se isso não estiver ocorrendo, o navegador do cliente não estará usando o cookie para conversas. Às vezes, o cliente pode mentir.

Próximas etapas

Se as etapas anteriores não resolverem o problema, abra um tíquete de suporte.