共用方式為


如何整合 Azure SignalR 與反向 Proxy

反向 Proxy 伺服器可在 Azure SignalR Service 前面使用。 反向 Proxy 伺服器位於用戶端與 Azure SignalR 服務之間,而且其他服務可以協助各種案例。 例如,反向 Proxy 伺服器可以將不同的用戶端要求負載平衡至不同的後端服務,您通常可以針對不同的用戶端要求設定不同的路由規則,並為存取不同後端服務的使用者提供順暢的使用者體驗。 其也可以利用集中式保護控制,保護您的後端伺服器免於常見的惡意探索弱點。 Azure 應用程式閘道Azure API 管理Akamai 等服務可以做為反向 Proxy 伺服器。

使用反向 Proxy 伺服器搭配 Azure SignalR 的常見結構如下:

此圖顯示搭配反向 Proxy 伺服器使用 Azure SignalR 的架構。

重要

原始 連接字串 只會針對示範目的出現在本文中。

連接字串 包含應用程式存取 Azure SignalR Service 所需的授權資訊。 連接字串內的存取金鑰類似於服務的根密碼。 在生產環境中,請一律保護您的存取金鑰。 使用 Azure 金鑰保存庫,使用 Microsoft Entra 識別碼安全地管理和輪替密鑰,並保護您的 連接字串,並使用 Microsoft Entra 識別符來授權存取權。

避免將存取金鑰散發給其他使用者、寫入程式碼,或將其以純文字儲存在他人可以存取的位置。 如果您認為金鑰可能已遭盜用,請輪替金鑰。

一般實務

在 SignalR Service 前面使用反向 Proxy 時,有數個一般做法要遵循。

原始 連接字串 只會針對示範目的出現在本文中。 在生產環境中,請一律保護您的存取金鑰。 使用 Azure 金鑰保存庫,使用 Microsoft Entra 識別碼安全地管理及輪替密鑰,並保護您的 連接字串,並使用 Microsoft Entra ID 授權存取權。

  • 請務必使用 Azure SignalR Service URL 重寫傳入 HTTP HOST 標頭,例如 https://demo.service.signalr.net。 Azure SignalR 是多租用戶服務,且依賴 HOST 標頭解析為正確的端點。 例如,在針對 Azure SignalR 設定應用程式閘道時,請針對 [使用新的主機名稱覆寫] 選項選取 [是]

  • 當您的用戶端通過反向 Proxy 前往 Azure SignalR 時,請將 ClientEndpoint 設定為反向 Proxy URL。 當您的用戶端與中樞伺服器「交涉」時,中樞伺服器會傳回 ClientEndpoint 中定義的 URL,以供用戶端連線。 如需詳細資訊,請參閱這裡。

    有兩種方式可以設定 ClientEndpoint

    • ClientEndpoint 區段新增至 ConnectionString:Endpoint=...;AccessKey=...;ClientEndpoint=<reverse-proxy-URL>

    • 呼叫 AddAzureSignalR 時設定 ClientEndpoint

      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>")
              }
          };
      })
      
  • 當用戶端通過反向 Proxy 前往 Azure SignalR 時,有兩種類型的要求:

    • <reverse-proxy-URL>/client/negotiate/ 的 HTTP 張貼要求,我們將其稱為交涉要求
    • WebSocket/SSE/LongPolling 連線要求,取決於您對 <reverse-proxy-URL>/client/ 的傳輸類型,我們將其稱為連線要求

    確定反向 Proxy 同時支援 /client/ 子路徑的這兩種傳輸類型。 例如,當您的傳輸類型為 WebSocket 時,請確定反向 Proxy 同時支援 HTTP 和 WebSocket 適用於 /client/ 子路徑。

    如果您已在反向 Proxy 後面設定多個 SignalR 服務,請確定具有相同 asrs_request_id 查詢參數的 negotiate 要求和 connect 要求 (表示其適用於相同的連線) 路由至相同的 SignalR Service 執行個體。

  • 使用反向 Proxy 時,您可以停用公用網路存取,並使用 私人端點,只允許透過 VNet 從反向 Proxy 到 SignalR 服務的私人存取,進一步保護您的 SignalR Service。

下一步