تسمح لك بوابة تطبيق Azure أن يكون لديك تطبيق App Service أو خدمة متعددة المستأجرين أخرى كعضو في تجمع الخلفية. في هذه المقالة، ستتعلم تكوين تطبيق خدمة التطبيقات باستخدام بوابة التطبيق. يختلف تكوين Application Gateway اعتمادا على كيفية الوصول إلى App Service:
- يستخدم الخيار الأول مجالا مخصصا على كل من Application Gateway وApp Service في الخلفية.
- الخيار الثاني هو أن يكون Application Gateway access App Service باستخدام مجالها الافتراضي، لاحقة باسم ".azurewebsite.net."
يوصى بهذا التكوين لسيناريوهات مستوى الإنتاج ويلبي ممارسة عدم تغيير اسم المضيف في تدفق الطلب. مطلوب منك أن يكون لديك مجال مخصص (وشهادة مقترنة) متاحة لتجنب الاضطرار إلى الاعتماد على الافتراضي ". مجال Azurewebsite".
نفس اسم المجال لكل من Application Gateway وApp Service في تجمع الواجهة الخلفية، لا يحتاج تدفق الطلب إلى تجاوز اسم المضيف. يرى تطبيق الويب الخلفي المضيف الأصلي كما تم استخدامه من قبل العميل.
هذا التكوين هو الأسهل ولا يتطلب مجالا مخصصا. على هذا النحو يسمح لإعداد مريحة سريعة.
عندما لا تحتوي App Service على مجال مخصص مقترن بها: يجب تعيين عنوان المضيف على الطلب الوارد على تطبيق الويب إلى المجال الافتراضي، أو لاحقه ب ".azurewebsites.net" وإلا فلن يتمكن النظام الأساسي من توجيه الطلب بشكل صحيح.
يختلف عنوان المضيف في الطلب الأصلي الذي تلقته بوابة التطبيق عن اسم مضيف خدمة التطبيقات الخلفية.
في هذه المقالة، تتعلم كيفية:
- تهيئة DNS
- إضافة App Service كتجمع خلفية إلى بوابة التطبيق
- تكوين إعدادات HTTP للاتصال بخدمة التطبيقات
- تكوين مستمع HTTP
- تكوين قاعدة توجيه الطلب
المتطلبات الأساسية
تكوين DNS
في سياق هذا السيناريو، يكون DNS ذا صلة في مكانين:
- اسم DNS، الذي يستخدمه المستخدم أو العميل تجاه Application Gateway وما يظهر في المستعرض
- اسم DNS، الذي تستخدمه بوابة التطبيق داخليا للوصول إلى App Service في الخلفية
توجيه المستخدم أو العميل إلى بوابة التطبيق باستخدام المجال المخصص. إعداد DNS باستخدام اسم مستعار CNAME يشير إلى DNS لبوابة التطبيق. يظهر عنوان DNS لبوابة التطبيق في صفحة النظرة العامة لعنوان IP العام المقترن. بدلا من ذلك، قم بإنشاء سجل A يشير إلى عنوان IP مباشرة. (بالنسبة ل Application Gateway V1، يمكن أن يتغير VIP إذا قمت بإيقاف الخدمة وبدء تشغيلها، ما يجعل هذا الخيار غير مستنير.)
يجب تكوين خدمة التطبيقات بحيث تقبل نسبة استخدام الشبكة من بوابة التطبيق باستخدام اسم المجال المخصص كمضيف وارد. لمزيد من المعلومات حول كيفية تعيين مجال مخصص إلى App Service، راجع البرنامج التعليمي: تعيين اسم DNS مخصص موجود إلى Azure App Service للتحقق من المجال، تتطلب App Service فقط إضافة سجل TXT. لا يلزم إجراء أي تغيير على سجلات CNAME أو A. يظل تكوين DNS للمجال المخصص موجها نحو Application Gateway.
لقبول الاتصالات بخدمة التطبيقات عبر HTTPS، قم بتكوين ربط TLS الخاص به. لمزيد من المعلومات، راجع تأمين اسم DNS مخصص مع ربط TLS/SSL في Azure App Service Configure App Service لسحب الشهادة للمجال المخصص من Azure Key Vault.
عندما لا يتوفر مجال مخصص، يمكن للمستخدم أو العميل الوصول إلى Application Gateway باستخدام عنوان IP للبوابة أو عنوان DNS الخاص به. يمكن العثور على عنوان DNS لبوابة التطبيق في صفحة النظرة العامة لعنوان IP العام المقترن. عدم توفر مجال مخصص يعني أنه لا توجد شهادة موقعة بشكل عام غير متوفرة ل TLS على بوابة التطبيق. يقتصر العملاء على استخدام HTTP أو HTTPS مع شهادة موقعة ذاتيا، وكلاهما غير المرغوب فيه.
للاتصال بخدمة التطبيقات، تستخدم بوابة التطبيق المجال الافتراضي كما هو مقدم من App Service (لاحقة "azurewebsites.net").
أضف «خدمة التطبيقات» كتجمع خلفي
في مدخل Microsoft Azure، حدد Application Gateway.
ضمن تجمعات الواجهة الخلفية، حدد «تجمع الواجهة الخلفية».
ضمن نوع الهدف، حددخدمات التطبيقات.
ضمن الهدفحدد «خدمة التطبيق الخاصة بك».
إشعار
تملأ القائمة المنسدلة فقط خدمات التطبيق الموجودة في نفس الاشتراك مثل Application Gateway. إذا كنت ترغب في استخدام خدمة تطبيق في اشتراك مختلف عن تلك التي توجد فيها بوابة التطبيق، فبدلا من اختيار App Services في القائمة المنسدلة Targets ، اختر عنوان IP أو اسم المضيف وأدخل اسم المضيف (example.azurewebsites.net) لخدمة التطبيق. إذا كنت تستخدم نقاط نهاية خاصة مع App Service، فيجب عليك استخدام FQDN الخاص بنقطة النهاية الخاصة أو عنوان IP بدلا من ذلك.
حدد حفظ.
# Fully qualified default domain name of the web app:
$webAppFQDN = "<nameofwebapp>.azurewebsite.net"
# For Application Gateway: both name, resource group and name for the backend pool to create:
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$appGwBackendPoolNameForAppSvc = "<name for backend pool to be added>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add a new Backend Pool with App Service in there:
Add-AzApplicationGatewayBackendAddressPool -Name $appGwBackendPoolNameForAppSvc -ApplicationGateway $gw -BackendFqdns $webAppFQDN
# Update Application Gateway with the new added Backend Pool:
Set-AzApplicationGateway -ApplicationGateway $gw
حرر إعدادات HTTP لخدمة التطبيقات
مطلوب إعداد HTTP الذي يوجه Application Gateway للوصول إلى الواجهة الخلفية لخدمة التطبيقات باستخدام اسم المجال المخصص. يستخدم إعداد HTTP بشكل افتراضي مسبار السلامة الافتراضي. بينما تقوم فحوصات السلامة الافتراضية بإعادة توجيه الطلبات باسم المضيف الذي يتم استلام حركة المرور فيه، يمكن أن تستخدم تحقيقات السلامة 127.0.0.1 كنم المضيف إلى تجمع الواجهة الخلفية حيث لم يتم تعريف اسم المضيف بشكل صريح. لهذا السبب، نحتاج إلى إنشاء فحص صحة مخصص تم تكوينه باسم المجال المخصص الصحيح كاسم مضيفه.
نحن نتصل بالواجهة الخلفية باستخدام HTTPS.
- ضمن إعدادات HTTP، حدد إعداد HTTP موجود أو أضف إعدادا جديدا.
- عند إنشاء إعداد HTTP جديد، قم بإعطائه اسما
- حدد HTTPS كبروتوكول الواجهة الخلفية المطلوب باستخدام المنفذ 443
- إذا تم توقيع الشهادة من قبل مرجع معروف، فحدد "نعم" ل "شهادة المرجع المصدق المعروفة للمستخدم". بدلا من ذلك ، أضف المصادقة/شهادات الجذر الموثوق بها للخوادم الخلفية
- تأكد من تعيين "تجاوز باسم مضيف جديد" إلى "لا"
- حدد فحص صحة HTTPS المخصص في القائمة المنسدلة ل "فحص مخصص".
مطلوب إعداد HTTP الذي يوجه Application Gateway للوصول إلى الواجهة الخلفية لخدمة التطبيقات باستخدام اسم المجال الافتراضي ("azurewebsites.net"). للقيام بذلك، سيتجاوز إعداد HTTP اسم المضيف بشكل صريح.
- ضمن إعدادات HTTP، حدد إعداد HTTP موجود أو أضف إعدادا جديدا.
- عند إنشاء إعداد HTTP جديد، قم بإعطائه اسما
- حدد HTTPS كبروتوكول الواجهة الخلفية المطلوب باستخدام المنفذ 443
- إذا تم توقيع الشهادة من قبل مرجع معروف، فحدد "نعم" ل "شهادة المرجع المصدق المعروفة للمستخدم". بدلا من ذلك ، أضف المصادقة/شهادات الجذر الموثوق بها للخوادم الخلفية
- تأكد من تعيين "تجاوز باسم مضيف جديد" إلى "نعم"
- ضمن "تجاوز اسم المضيف"، حدد "اختيار اسم المضيف من هدف الواجهة الخلفية". يؤدي هذا الإعداد إلى طلب خدمة التطبيقات لاستخدام اسم المضيف "azurewebsites.net"، كما تم تكوينه في تجمع الواجهة الخلفية.
# Configure Application Gateway to connect to App Service using the incoming hostname
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$customProbeName = "<name for custom health probe>"
$customDomainName = "<FQDN for custom domain associated with App Service>"
$httpSettingsName = "<name for http settings to be created>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add custom health probe using custom domain name:
Add-AzApplicationGatewayProbeConfig -Name $customProbeName -ApplicationGateway $gw -Protocol Https -HostName $customDomainName -Path "/" -Interval 30 -Timeout 120 -UnhealthyThreshold 3
$probe = Get-AzApplicationGatewayProbeConfig -Name $customProbeName -ApplicationGateway $gw
# Add HTTP Settings to use towards App Service:
Add-AzApplicationGatewayBackendHttpSettings -Name $httpSettingsName -ApplicationGateway $gw -Protocol Https -Port 443 -Probe $probe -CookieBasedAffinity Disabled -RequestTimeout 30
# Update Application Gateway with the new added HTTP settings and probe:
Set-AzApplicationGateway -ApplicationGateway $gw
# Configure Application Gateway to connect to backend using default App Service hostname
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$httpSettingsName = "<name for http settings to be created>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add HTTP Settings to use towards App Service:
Add-AzApplicationGatewayBackendHttpSettings -Name $httpSettingsName -ApplicationGateway $gw -Protocol Https -Port 443 -PickHostNameFromBackendAddress -CookieBasedAffinity Disabled -RequestTimeout 30
# Update Application Gateway with the new added HTTP settings and probe:
Set-AzApplicationGateway -ApplicationGateway $gw
لقبول نسبة استخدام الشبكة، نحتاج إلى تكوين وحدة استماع. لمزيد من المعلومات حول وحدة الاستماع، راجع تكوين وحدة الإصغاء لبوابة التطبيق.
- افتح قسم "المستمعون" واختر "إضافة وحدة استماع" أو حدد وحدة استماع موجودة لتحريرها
- لمستمع جديد: قم بإعطائه اسما
- ضمن "Frontend IP"، حدد عنوان IP للاستماع إليه
- ضمن "المنفذ"، حدد 443
- ضمن "Protocol"، حدد "HTTPS"
- ضمن "اختيار شهادة"، حدد "اختيار شهادة من Key Vault". لمزيد من المعلومات، راجع استخدام Key Vault حيث يمكنك العثور على مزيد من المعلومات حول كيفية تعيين هوية مدارة وتزويدها بحقوق Key Vault.
- إعطاء الشهادة اسما
- حدد الهوية المدارة
- حدد Key Vault من أين تحصل على الشهادة
- حدد الشهادة
- ضمن "نوع المستمع"، حدد "أساسي"
- حدد "إضافة" لإضافة وحدة الاستماع
بافتراض عدم وجود مجال مخصص متوفر أو شهادة مقترنة، قم بتكوين Application Gateway للاستماع إلى حركة مرور HTTP على المنفذ 80. بدلا من ذلك، راجع الإرشادات حول كيفية إنشاء شهادة موقعة ذاتيا
- افتح قسم "المستمعون" واختر "إضافة وحدة استماع" أو حدد وحدة استماع موجودة لتحريرها
- لمستمع جديد: قم بإعطائه اسما
- ضمن "Frontend IP"، حدد عنوان IP للاستماع إليه
- ضمن "المنفذ"، حدد 80
- ضمن "Protocol"، حدد "HTTP"
# This script assumes that:
# - a certificate was imported in Azure Key Vault already
# - a managed identity was assigned to Application Gateway with access to the certificate
# - there is no HTTP listener defined yet for HTTPS on port 443
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$appGwSSLCertificateName = "<name for ssl cert to be created within Application Gateway"
$appGwSSLCertificateKeyVaultSecretId = "<key vault secret id for the SSL certificate to use>"
$httpListenerName = "<name for the listener to add>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Create SSL certificate object for Application Gateway:
Add-AzApplicationGatewaySslCertificate -Name $appGwSSLCertificateName -ApplicationGateway $gw -KeyVaultSecretId $appGwSSLCertificateKeyVaultSecretId
$sslCert = Get-AzApplicationGatewaySslCertificate -Name $appGwSSLCertificateName -ApplicationGateway $gw
# Fetch public ip associated with Application Gateway:
$ipAddressResourceId = $gw.FrontendIPConfigurations.PublicIPAddress.Id
$ipAddressResource = Get-AzResource -ResourceId $ipAddressResourceId
$publicIp = Get-AzPublicIpAddress -ResourceGroupName $ipAddressResource.ResourceGroupName -Name $ipAddressResource.Name
$frontendIpConfig = $gw.FrontendIpConfigurations | Where-Object {$_.PublicIpAddress -ne $null}
$port = New-AzApplicationGatewayFrontendPort -Name "port_443" -Port 443
Add-AzApplicationGatewayFrontendPort -Name "port_443" -ApplicationGateway $gw -Port 443
Add-AzApplicationGatewayHttpListener -Name $httpListenerName -ApplicationGateway $gw -Protocol Https -FrontendIPConfiguration $frontendIpConfig -FrontendPort $port -SslCertificate $sslCert
# Update Application Gateway with the new HTTPS listener:
Set-AzApplicationGateway -ApplicationGateway $gw
في كثير من الحالات، يوجد وحدة استماع عامة ل HTTP على المنفذ 80. ينشئ البرنامج النصي أدناه واحدا إذا لم يكن الأمر كذلك بعد.
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$httpListenerName = "<name for the listener to add if not exists yet>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check if HTTP listener on port 80 already exists:
$port = $gw.FrontendPorts | Where-Object {$_.Port -eq 80}
$listener = $gw.HttpListeners | Where-Object {$_.Protocol.ToString().ToLower() -eq "http" -and $_.FrontendPort.Id -eq $port.Id}
if ($listener -eq $null){
$frontendIpConfig = $gw.FrontendIpConfigurations | Where-Object {$_.PublicIpAddress -ne $null}
Add-AzApplicationGatewayHttpListener -Name $httpListenerName -ApplicationGateway $gw -Protocol Http -FrontendIPConfiguration $frontendIpConfig -FrontendPort $port
# Update Application Gateway with the new HTTPS listener:
Set-AzApplicationGateway -ApplicationGateway $gw
}
يمكن إعداد قاعدة توجيه الطلب التي تم تكوينها مسبقا لتجمع الواجهة الخلفية وإعدادات HTTP لأخذ نسبة استخدام الشبكة من وحدة استماع وتوجيهها إلى تجمع الخلفية باستخدام إعدادات HTTP. لهذا، تأكد من أن لديك مستمع HTTP أو HTTPS متوفرا غير مرتبط بالفعل بقاعدة توجيه موجودة.
- ضمن "Rules"، حدد لإضافة "Request routing rule" جديدة
- توفير القاعدة باسم
- حدد مستمع HTTP أو HTTPS غير مرتبط حتى الآن بقاعدة توجيه موجودة
- ضمن "أهداف الواجهة الخلفية"، اختر تجمع الواجهة الخلفية الذي تم تكوين App Service فيه
- تكوين إعدادات HTTP التي يجب أن تتصل بها بوابة التطبيق بالواجهة الخلفية ل App Service
- حدد "إضافة" لحفظ هذا التكوين
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$httpListenerName = "<name for existing http listener (without rule) to route traffic from>"
$httpSettingsName = "<name for http settings to use>"
$appGwBackendPoolNameForAppSvc = "<name for backend pool to route to>"
$reqRoutingRuleName = "<name for request routing rule to be added>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Get HTTP Settings:
$httpListener = Get-AzApplicationGatewayHttpListener -Name $httpListenerName -ApplicationGateway $gw
$httpSettings = Get-AzApplicationGatewayBackendHttpSettings -Name $httpSettingsName -ApplicationGateway $gw
$backendPool = Get-AzApplicationGatewayBackendAddressPool -Name $appGwBackendPoolNameForAppSvc -ApplicationGateway $gw
# Add routing rule:
Add-AzApplicationGatewayRequestRoutingRule -Name $reqRoutingRuleName -ApplicationGateway $gw -RuleType Basic -BackendHttpSettings $httpSettings -HttpListener $httpListener -BackendAddressPool $backendPool
# Update Application Gateway with the new routing rule:
Set-AzApplicationGateway -ApplicationGateway $gw
الاختبار
قبل أن نفعل ذلك، تأكد من أن صحة الخلفية تظهر على أنها صحية:
افتح قسم "Backend health" وتأكد من أن العمود "Status" يشير إلى الجمع بين HTTP Setting و Backend Pool على أنه "صحي".
الآن استعرض إلى تطبيق الويب باستخدام عنوان IP لبوابة التطبيق أو اسم DNS المقترن لعنوان IP. يمكن العثور على كليهما في صفحة "نظرة عامة" على Application Gateway كخاصية ضمن "Essentials". بدلا من ذلك، يعرض مورد عنوان IP العام أيضا عنوان IP واسم DNS المقترن.
انتبه إلى قائمة الأعراض المحتملة غير المهينة التالية عند اختبار التطبيق:
- عمليات إعادة التوجيه التي تشير إلى "azurewebsite.net" مباشرة بدلا من بوابة التطبيق
- يتضمن عمليات إعادة توجيه المصادقة التي تحاول الوصول إلى ".azurewebsite.net" مباشرة
- لا يتم تمرير ملفات تعريف الارتباط المرتبطة بالمجال إلى الخلفية
- تضمين استخدام إعداد "ترابط ARR" في App Service
تشير الشروط المذكورة أعلاه (الموضحة بمزيد من التفصيل في Architecture Center) إلى أن تطبيق الويب الخاص بك لا يتعامل بشكل جيد مع إعادة كتابة اسم المضيف. هذا هو ينظر إليها بشكل شائع. الطريقة الموصى بها للتعامل مع هذا هي اتباع الإرشادات لتكوين Application Gateway مع App Service باستخدام مجال مخصص. راجع أيضا: استكشاف مشكلات App Service وإصلاحها في Application Gateway.
افتح قسم "Backend health" وتأكد من أن العمود "Status" يشير إلى الجمع بين HTTP Setting و Backend Pool على أنه "صحي".
الآن استعرض إلى تطبيق الويب باستخدام المجال المخصص الذي قمت بإقرانه بكل من Application Gateway وApp Service في الخلفية.
تحقق مما إذا كانت صحة الخلفية للواجهة الخلفية وإعدادات HTTP تظهر على أنها "سليمة":
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check health:
Get-AzApplicationGatewayBackendHealth -ResourceGroupName $rgName -Name $appGwName
لاختبار التكوين، نطلب محتوى من App Service من خلال Application Gateway باستخدام المجال المخصص:
$customDomainName = "<FQDN for custom domain pointing to Application Gateway>"
Invoke-WebRequest $customDomainName
تحقق مما إذا كانت صحة الخلفية للواجهة الخلفية وإعدادات HTTP تظهر على أنها "سليمة":
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check health:
Get-AzApplicationGatewayBackendHealth -ResourceGroupName $rgName -Name $appGwName
لاختبار التكوين، نطلب محتوى من خدمة التطبيقات من خلال Application Gateway باستخدام عنوان IP:
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Get ip address:
$ipAddressResourceId = $gw.FrontendIPConfigurations.PublicIPAddress.Id
$ipAddressResource = Get-AzResource -ResourceId $ipAddressResourceId
$publicIp = Get-AzPublicIpAddress -ResourceGroupName $ipAddressResource.ResourceGroupName -Name $ipAddressResource.Name
Write-Host "Public ip address for Application Gateway is $($publicIp.IpAddress)"
Invoke-WebRequest "http://$($publicIp.IpAddress)"
انتبه إلى قائمة الأعراض المحتملة غير المهينة التالية عند اختبار التطبيق:
- عمليات إعادة التوجيه التي تشير إلى "azurewebsites.net" مباشرة بدلا من بوابة التطبيق
- يتضمن ذلك عمليات إعادة توجيه مصادقة خدمة التطبيقات التي تحاول الوصول إلى ".azurewebsites.net" مباشرة
- لا يتم تمرير ملفات تعريف الارتباط المرتبطة بالمجال إلى الخلفية
- يتضمن ذلك استخدام إعداد "ترابط ARR" في App Service
تشير الشروط المذكورة أعلاه (الموضحة بمزيد من التفصيل في Architecture Center) إلى أن تطبيق الويب الخاص بك لا يتعامل بشكل جيد مع إعادة كتابة اسم المضيف. هذا هو ينظر إليها بشكل شائع. الطريقة الموصى بها للتعامل مع هذا الشرط هي اتباع الإرشادات لتكوين Application Gateway مع App Service باستخدام مجال مخصص. راجع أيضا: استكشاف مشكلات App Service وإصلاحها في Application Gateway.
تقييد الوصول
تستخدم تطبيقات الويب المنشورة في هذه الأمثلة عناوين IP العامة التي يمكن الوصول إليها مباشرة من الإنترنت. يساعد هذا في استكشاف الأخطاء وإصلاحها عند التعرف على ميزة جديدة وتجربة أشياء جديدة. ولكن إذا كنت تنوي نشر ميزة في الإنتاج، فأنت تريد إضافة المزيد من القيود. يجب مراعاة الخيارات التالية:
- تكوين قواعد تقييد الوصول استنادا إلى نقاط نهاية الخدمة. يسمح لك هذا بتأمين الوصول الوارد إلى التطبيق للتأكد من أن عنوان المصدر من بوابة التطبيق.
- استخدم قيود IP الثابتة لخدمة تطبيقات Azure. على سبيل المثال، يمكنك تقييد تطبيق الويب بحيث يتلقى فقط نسبة استخدام الشبكة من بوابة التطبيق. استخدم ميزة تقييد IP لخدمة التطبيق لإدراج VIP لبوابة التطبيق باعتباره العنوان الوحيد الذي يمكنه الوصول.