مشاركة عبر


كيفية دمج Azure SignalR مع وكلاء عكسيين

يمكن استخدام خادم وكيل عكسي أمام Azure SignalR Service. يمكن أن تساعد خوادم الوكيل العكسية بين العملاء وخدمة Azure SignalR والخدمات الأخرى في سيناريوهات مختلفة. على سبيل المثال، يمكن للخوادم الوكيلة العكسية تحميل طلبات العميل المختلفة إلى خدمات خلفية مختلفة، ويمكنك عادة تكوين قواعد توجيه مختلفة لطلبات العميل المختلفة، وتوفير تجربة مستخدم سلسة للمستخدمين الذين يصلون إلى خدمات خلفية مختلفة. يمكنهم أيضا حماية خوادم الواجهة الخلفية من الثغرات الأمنية الشائعة التي تستغلها مع التحكم المركزي في الحماية. يمكن أن تعمل خدمات مثل Azure Application Gateway أو Azure API Management أو Akamai كخوادم وكيل عكسية.

البنية الشائعة التي تستخدم خادم وكيل عكسي مع Azure SignalR هي كما يلي:

رسم تخطيطي يوضح البنية باستخدام Azure SignalR مع خادم وكيل عكسي.

هام

تظهر سلسلة الاتصال الأولية في هذه المقالة لأغراض العرض التوضيحي فقط.

يتضمن سلسلة الاتصال معلومات التخويل المطلوبة لتطبيقك للوصول إلى خدمة Azure SignalR. مفتاح الوصول داخل سلسلة الاتصال يشبه كلمة مرور الجذر للخدمة الخاصة بك. في بيئات الإنتاج، قم دائما بحماية مفاتيح الوصول الخاصة بك. استخدم Azure Key Vault لإدارة مفاتيحك وتدويرها بأمان وتأمين سلسلة الاتصال باستخدام معرف Microsoft Entra وتخويل الوصول باستخدام معرف Microsoft Entra.

تجنب توزيع مفاتيح الوصول إلى مستخدمين آخرين، أو ترميزها ترميزًا ثابتًا، أو حفظها في أي مكان في نص عادي يمكن للآخرين الوصول إليه. قم بتدوير المفاتيح الخاصة بك إذا كنت تعتقد أنها قد تعرضت للخطر.

الممارسات العامة

هناك العديد من الممارسات العامة التي يجب اتباعها عند استخدام وكيل عكسي أمام SignalR Service.

تظهر سلسلة الاتصال الأولية في هذه المقالة لأغراض العرض التوضيحي فقط. في بيئات الإنتاج، قم دائما بحماية مفاتيح الوصول الخاصة بك. استخدم Azure Key Vault لإدارة مفاتيحك وتدويرها بأمان وتأمين سلسلة الاتصال باستخدام معرف Microsoft Entra وتخويل الوصول باستخدام معرف Microsoft Entra.

  • تأكد من إعادة كتابة عنوان HTTP HOST الوارد باستخدام عنوان URL لخدمة Azure SignalR، على سبيل المثالhttps://demo.service.signalr.net. Azure SignalR هي خدمة متعددة المستأجرين، وتعتمد على HOST العنوان للحل إلى نقطة النهاية الصحيحة. على سبيل المثال، عند تكوين بوابة التطبيق ل Azure SignalR، حدد نعم للخيار تجاوز باسم مضيف جديد.

  • عندما يمر عميلك عبر الوكيل العكسي الخاص بك إلى Azure SignalR، قم بتعيين ClientEndpoint كعنون URL للوكيل العكسي. عندما يتفاوضالعميل مع خادم المركز الخاص بك، سيعيد خادم المركز عنوان URL المحدد في ClientEndpoint للعميل للاتصال. تحقق هنا لمزيد من التفاصيل.

    هناك طريقتان لتكوين ClientEndpoint:

    • ClientEndpoint إضافة مقطع إلى ConnectionString:Endpoint=...;AccessKey=...;ClientEndpoint=<reverse-proxy-URL>

    • تكوين ClientEndpoint عند استدعاء 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>")
              }
          };
      })
      
  • عندما يمر عميل عبر الوكيل العكسي الخاص بك إلى Azure SignalR، هناك نوعان من الطلبات:

    • طلب نشر HTTP إلى <reverse-proxy-URL>/client/negotiate/، والذي نسميه كطلب تفاوض
    • طلب اتصال WebSocket/SSE/LongPolling اعتمادا على نوع النقل الخاص بك إلى <reverse-proxy-URL>/client/، والذي نسميه كطلب اتصال.

    تأكد من أن الوكيل العكسي يدعم كلا النوعين من النقل للمسار /client/ الفرعي. على سبيل المثال، عندما يكون نوع النقل الخاص بك هو WebSocket، تأكد من أن الوكيل العكسي يدعم كلا من HTTP وWebSocket للمسار /client/ الفرعي.

    إذا قمت بتكوين خدمات SignalR متعددة خلف الوكيل العكسي، فتأكد من negotiate توجيه الطلب والطلب connect بنفس asrs_request_id معلمة الاستعلام (بمعنى أنها لنفس الاتصال) إلى نفس مثيل خدمة SignalR.

  • بالنسبة إلى ServerSentEvent(SSE)، تأكد من أن الوكيل العكسي لا يقوم بالتخزين المؤقت أو استجابة ذاكرة التخزين المؤقت. على سبيل المثال، تسرد APIM خانات الاختيار هنا عند تكوين واجهة برمجة التطبيقات للأحداث المرسلة من الخادم.

  • عند استخدام الوكيل العكسي، يمكنك تأمين خدمة SignalR بشكل أكبر عن طريق تعطيل الوصول إلى الشبكة العامة واستخدام نقاط النهاية الخاصة للسماح بالوصول الخاص فقط من الوكيل العكسي إلى خدمة SignalR من خلال VNet.

الخطوات التالية