تتيح لك بوابة التطبيق الحصول على تطبيق App Service أو خدمة أخرى متعددة المستأجرين كعضو في تجمع الخلفية. في هذه المقالة، ستتعلم تكوين تطبيق خدمة التطبيقات باستخدام بوابة التطبيق. سيختلف تكوين Application Gateway اعتمادا على كيفية الوصول إلى App Service:
يستخدم الخيار الأول مجالا مخصصا على كل من Application Gateway وApp Service في الخلفية.
الخيار الثاني هو أن يكون Application Gateway access App Service باستخدام مجالها الافتراضي، لاحقة ك ".azurewebsites.net".
يوصى بهذا التكوين لسيناريوهات مستوى الإنتاج ويلبي ممارسة عدم تغيير اسم المضيف في تدفق الطلب. يجب أن يكون لديك مجال مخصص (وشهادة مقترنة) متاحة لتجنب الاضطرار إلى الاعتماد على المجال الافتراضي "azurewebsites".
من خلال إقران نفس اسم المجال بكل من Application Gateway وApp Service في تجمع الواجهة الخلفية، لا يحتاج تدفق الطلب إلى تجاوز اسم المضيف. سيرى تطبيق الويب الخلفي المضيف الأصلي كما تم استخدامه من قبل العميل.
هذا التكوين هو الأسهل ولا يتطلب مجالا مخصصا. على هذا النحو يسمح لإعداد مريحة سريعة.
عندما لا تحتوي App Service على مجال مخصص مقترن بها، يجب تعيين عنوان المضيف على الطلب الوارد على تطبيق الويب إلى المجال الافتراضي، أو لاحقه ب ".azurewebsites.net" وإلا فلن يتمكن النظام الأساسي من توجيه الطلب بشكل صحيح.
سيكون عنوان المضيف في الطلب الأصلي الذي تلقته بوابة التطبيق مختلفا عن اسم مضيف خدمة التطبيقات الخلفية.
توجيه المستخدم أو العميل إلى بوابة التطبيق باستخدام المجال المخصص. إعداد 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 تكوين خدمة التطبيقات لسحب الشهادة للمجال المخصص من Azure Key Vault.
عندما لا يتوفر مجال مخصص، يمكن للمستخدم أو العميل الوصول إلى Application Gateway باستخدام عنوان IP للبوابة أو عنوان DNS الخاص به. يمكن العثور على عنوان DNS لبوابة التطبيق في صفحة النظرة العامة لعنوان IP العام المقترن. يعني عدم توفر مجال مخصص أنه لن تتوفر شهادة موقعة بشكل عام ل TLS على بوابة التطبيق. يقتصر العملاء على استخدام HTTP أو HTTPS مع شهادة موقعة ذاتيا، وكلاهما غير المرغوب فيه.
للاتصال بخدمة التطبيقات، تستخدم بوابة التطبيق المجال الافتراضي كما هو مقدم من App Service (لاحقة "azurewebsites.net").
ضمن تجمعات الواجهة الخلفية، حدد «تجمع الواجهة الخلفية».
ضمن نوع الهدف، حددخدمات التطبيقات.
ضمن الهدفحدد «خدمة التطبيق الخاصة بك».
إشعار
تقوم القائمة المنسدلة فقط بملء خدمات التطبيقات الموجودة في نفس الاشتراك مثل بوابة التطبيق الخاصة بك. إذا كنت ترغب في استخدام خدمة تطبيق في اشتراك مختلف عن الاشتراك الذي توجد فيه بوابة التطبيق، فبدلا من اختيار App Services في القائمة المنسدلة Targets ، اختر عنوان IP أو اسم المضيف وأدخل اسم المضيف (example.azurewebsites.net) لخدمة التطبيق.
حدد حفظ.
# 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 الذي يوجه 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
ضمن "تجاوز اسم المضيف"، حدد "اختيار اسم المضيف من هدف الواجهة الخلفية". سيؤدي هذا الإعداد إلى أن يستخدم الطلب نحو App Service اسم المضيف "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
تكوين وحدة إصغاء HTTP
لقبول نسبة استخدام الشبكة، نحتاج إلى تكوين وحدة استماع. لمزيد من المعلومات حول هذا راجع تكوين وحدة استماع بوابة التطبيق.
افتح قسم "المستمعون" واختر "إضافة وحدة استماع" أو انقر فوق وحدة استماع موجودة لتحريرها
لمستمع جديد: قم بإعطائه اسما
ضمن "Frontend IP"، حدد عنوان IP للاستماع إليه
ضمن "المنفذ"، حدد 443
ضمن "Protocol"، حدد "HTTPS"
ضمن "Choose a certificate"، حدد "Choose a certificate from 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 متوفرا غير مرتبط بالفعل بقاعدة توجيه موجودة.
افتح قسم "Backend health" وتأكد من أن العمود "Status" يشير إلى الجمع بين HTTP Setting و Backend Pool الذي يظهر على أنه "صحي".
الآن استعرض إلى تطبيق الويب باستخدام عنوان IP لبوابة التطبيق أو اسم DNS المقترن لعنوان IP. يمكن العثور على كليهما في صفحة "نظرة عامة" على Application Gateway كخاصية ضمن "Essentials". بدلا من ذلك، يعرض مورد عنوان IP العام أيضا عنوان IP واسم DNS المقترن.
انتبه إلى القائمة غير الشاملة التالية للأعراض المحتملة عند اختبار التطبيق:
عمليات إعادة التوجيه التي تشير إلى "azurewebsites.net" مباشرة بدلا من بوابة التطبيق
يتضمن ذلك عمليات إعادة توجيه المصادقة التي تحاول الوصول إلى ".azurewebsites.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
لاختبار التكوين، سنطلب محتوى من App Service من خلال 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" مباشرة بدلا من بوابة التطبيق
لا يتم تمرير ملفات تعريف الارتباط المرتبطة بالمجال إلى الخلفية
يتضمن ذلك استخدام إعداد "ترابط ARR" في App Service
تشير الشروط المذكورة أعلاه (الموضحة بمزيد من التفصيل في Architecture Center) إلى أن تطبيق الويب الخاص بك لا يتعامل بشكل جيد مع إعادة كتابة اسم المضيف. هذا هو ينظر إليها بشكل شائع. الطريقة الموصى بها للتعامل مع هذا هي اتباع الإرشادات لتكوين Application Gateway مع App Service باستخدام مجال مخصص. راجع أيضا: استكشاف مشكلات App Service وإصلاحها في Application Gateway.
تقييد الوصول
تستخدم تطبيقات الويب المنشورة في هذه الأمثلة عناوين IP العامة التي يمكن الوصول إليها مباشرة من الإنترنت. يساعد هذا في استكشاف الأخطاء وإصلاحها عند التعرف على ميزة جديدة وتجربة أشياء جديدة. ولكن إذا كنت تنوي توزيع ميزة في الإنتاج، فستحتاج إلى إضافة المزيد من القيود. يجب مراعاة الخيارات التالية:
تكوين قواعد تقييد الوصول استنادا إلى نقاط نهاية الخدمة. يسمح لك هذا بتأمين الوصول الوارد إلى التطبيق للتأكد من أن عنوان المصدر من بوابة التطبيق.
استخدم قيود IP الثابتة لخدمة تطبيقات Azure. على سبيل المثال، يمكنك تقييد تطبيق الويب بحيث يتلقى فقط نسبة استخدام الشبكة من بوابة التطبيق. استخدم ميزة تقييد IP لخدمة التطبيق لإدراج VIP لبوابة التطبيق باعتباره العنوان الوحيد الذي يمكنه الوصول.