Partilhar via


Como integrar o Azure SignalR com proxies reversos

Um servidor proxy reverso pode ser usado na frente do Serviço Azure SignalR. Os servidores proxy reverso ficam entre os clientes e o serviço Azure SignalR, e outros serviços podem ajudar em vários cenários. Por exemplo, os servidores proxy reverso podem balancear a carga de diferentes solicitações de clientes para diferentes serviços de back-end, você geralmente pode configurar regras de roteamento diferentes para solicitações de clientes diferentes e fornecer uma experiência de usuário perfeita para usuários que acessam diferentes serviços de back-end. Eles também podem proteger seus servidores back-end contra vulnerabilidades de exploits comuns com controle de proteção centralizado. Serviços como o Azure Application Gateway, Azure API Management ou Akamai podem atuar como servidores proxy reverso.

Uma arquitetura comum usando um servidor proxy reverso com o Azure SignalR é a seguinte:

Diagrama que mostra a arquitetura usando o Azure SignalR com um servidor proxy reverso.

Importante

As cadeias de conexão brutas aparecem neste artigo apenas para fins de demonstração.

Uma cadeia de conexão inclui as informações de autorização necessárias para seu aplicativo acessar o Serviço Azure SignalR. A chave de acesso dentro da cadeia de conexão é semelhante a uma senha de root para o seu serviço. Em ambientes de produção, proteja sempre as suas chaves de acesso. Use o Azure Key Vault para gerenciar e girar suas chaves com segurança e proteger sua cadeia de conexão usando a ID do Microsoft Entra e autorizar o acesso com a ID do Microsoft Entra.

Evite distribuir chaves de acesso para outros usuários, codificá-las ou salvá-las em qualquer lugar em texto simples acessível a outras pessoas. Rode as suas chaves se acreditar que podem ter sido comprometidas.

Práticas gerais

Há várias práticas gerais a serem seguidas ao usar um proxy reverso para o Serviço SignalR.

As cadeias de conexão brutas aparecem neste artigo apenas para fins de demonstração. Em ambientes de produção, proteja sempre as suas chaves de acesso. Use o Azure Key Vault para gerenciar e girar suas chaves com segurança e proteger sua cadeia de conexão usando a ID do Microsoft Entra e autorizar o acesso com a ID do Microsoft Entra.

  • Certifique-se de reescrever o cabeçalho HTTP HOST de entrada com a URL do serviço Azure SignalR, por exemplo: https://demo.service.signalr.net. O Azure SignalR é um serviço multilocatário e depende do cabeçalho HOST para resolver para o ponto de extremidade correto. Por exemplo, ao configurar o Gateway de Aplicativo para o Azure SignalR, selecione Sim para a opção Substituir com novo nome de host.

  • Quando seu cliente passar pelo proxy reverso para o Azure SignalR, defina ClientEndpoint como sua URL de proxy reverso. Quando o cliente negocia com o servidor de hub, o servidor de hub retornará a URL definida em ClientEndpoint para que o cliente possa se conectar. Confira aqui mais detalhes.

    Há duas maneiras de configurar ClientEndpoint:

    • Adicione uma ClientEndpoint seção ao seu ConnectionString: Endpoint=...;AccessKey=...;ClientEndpoint=<reverse-proxy-URL>

    • Configurar ClientEndpoint ao chamar AddAzureSignalR:

      services.AddSignalR().AddAzureSignalR(o =>
      {
          o.Endpoints = new Microsoft.Azure.SignalR.ServiceEndpoint[1]
          {
              new Microsoft.Azure.SignalR.ServiceEndpoint("<azure-signalr-connection-string>")
              {
                  ClientEndpoint = new Uri("<reverse-proxy-URL>")
              }
          };
      })
      
  • Quando um cliente passa pelo proxy reverso para o Azure SignalR, há dois tipos de solicitações:

    • Envio de solicitação HTTP para <reverse-proxy-URL>/client/negotiate/, que chamamos de solicitação de negociação
    • Solicitação de conexão para WebSocket/SSE/LongPolling, conforme o seu tipo de transporte, para <reverse-proxy-URL>/client/, que chamamos de pedido de conexão.

    Certifique-se de que o proxy reverso suporta ambos os tipos de transporte para /client/ subdiretório. Por exemplo, quando o tipo de transporte for WebSocket, verifique se o proxy reverso suporta ambos HTTP e WebSocket no subcaminho /client/.

    Se você configurou vários serviços SignalR por trás do proxy reverso, certifique-se de que negotiate a solicitação e connect a solicitação com o mesmo asrs_request_id parâmetro de consulta (o que significa que são para a mesma conexão) sejam roteadas para a mesma instância de serviço SignalR.

  • Para ServerSentEvent(SSE), certifique-se de que o proxy reverso não armazena a resposta em buffer ou em cache. Por exemplo, o Gerenciamento de API lista os itens de verificação aqui ao configurar a API para eventos enviados pelo servidor.

  • Quando o proxy reverso é usado, você pode proteger ainda mais seu serviço SignalR desativando o acesso à rede pública e usando pontos de extremidade privados para permitir apenas o acesso privado do seu proxy reverso ao seu serviço SignalR através da VNet.

Próximos passos