إنشاء بوابة تطبيق تستضيف مواقع ويب متعددة باستخدام Azure PowerShell

يمكنك استخدام Azure PowerShell لتكوين استضافة مواقع ويب متعددة عند إنشاء بوابة تطبيق. في هذه المقالة، تقوم بتعريف قائمة العناوين الخلفية باستخدام مجموعات تغيير سعة الأجهزة الظاهرية. يمكنك بعد ذلك تكوين المستمعين والقواعد بناءً على مجالين للتأكد من وصول حركة مرور الويب إلى الخوادم المناسبة في المجمعات. تفترض هذه المقالة أنك تملك مجالات متعددة وتستخدم أمثلة على www.contoso.com و www.fabrikam.com.

في هذه المقالة، ستتعرف على كيفية:

  • إعداد الشبكة
  • إنشاء بوابة تطبيق
  • إنشاء وحدة الاستماع الخلفية
  • إنشاء قواعد التوجيه
  • إنشاء مجموعات تغيير سعة افتراضية مع تجمعات الواجهة الخلفية
  • إنشاء سجل CNAME في مجالك

في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

إشعار

نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. للبدء، راجع تثبيت Azure PowerShell. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

Azure Cloud Shell

Azure يستضيف Azure Cloud Shell، بيئة تفاعلية يمكن استخدامها من خلال المستعرض. يمكنك استخدام Bash أو PowerShell مع Cloud Shell للعمل مع خدمات Azure. يمكنك استخدام أوامر Cloud Shell المثبتة مسبقًا لتشغيل التعليمات البرمجية في هذه المقالة دون الحاجة إلى تثبيت أي شيء على البيئة المحلية.

لبدء Azure Cloud Shell:

خيار مثال/ رابط
انقر فوق ⁧⁩جربه⁧⁩ في الزاوية العلوية اليسرى من التعليمة البرمجية أو كتلة الأمر. تحديد ⁧⁩جربه⁧⁩ لا يقوم بنسخ التعليمة البرمجية أو الأمر تلقائيًا إلى Cloud Shell. لقطة شاشة تعرض مثالاً على Try It for Azure Cloud Shell.
انتقل إلى ⁧⁩⁧ https://shell.azure.com⁩⁧⁩، أو حدد زر ⁩تشغيل Cloud Shell لفتح Cloud Shell في المتصفح لديك. زر لتشغيل Azure Cloud Shell.
حدد زر Cloud Shell على شريط القوائم في أعلى اليمين في مدخل Microsoft Azure. لقطة شاشة تعرض زر Cloud Shell في مدخل Microsoft Azure

لاستخدام Azure Cloud Shell:

  1. ابدأ تشغيل Cloud Shell.

  2. حدد الزر نسخ على كتلة التعليمات البرمجية (أو كتلة الأوامر) لنسخ التعليمات البرمجية أو الأمر.

  3. ألصق التعليمة البرمجية أو الأمر في جلسة Cloud Shell بتحديد Ctrl+Shift+Vعلى Windows وLunix، أو بتحديد Cmd+Shift+Vعلى macOS.

  4. حدد Enter لتشغيل التعليمات البرمجية أو الأمر.

إذا اخترت تثبيت PowerShell واستخدامه محليًّا، فستتطلب هذه المقالة إصدار الوحدة النمطية Azure PowerShell 1.0.0 أو إصدارًا أحدث. للعثور على الإصدار، قم بتشغيل Get-Module -ListAvailable Az . إذا كنت بحاجة إلى الترقية، فراجع تثبيت الوحدة النمطية Azure PowerShell. في حالة تشغيل PowerShell محليًا، فأنت بحاجة أيضًا إلى تشغيل Login-AzAccount لإنشاء اتصال مع Azure.

إنشاء مجموعة موارد

وتُعد مجموعة الموارد عبارة عن حاوية منطقية يتم فيها توزيع موارد Azure وإدارتها. أنشئ مجموعة موارد Azure باستخدام New-AzResourceGroup.

New-AzResourceGroup -Name myResourceGroupAG -Location eastus

إنشاء موارد الشبكة

أنشئ تكوين شبكة فرعية باستخدام New-AzVirtualNetworkSubnetConfig. أنشئ شبكة الاتصال الظاهرية باستخدام New-AzVirtualNetwork من خلال تكوينات الشبكة الفرعية. وأخيراً، أنشئ عنوان IP العام باستخدام New-AzPublicIpAddress. تُستخدم هذه الموارد لتوفير اتصال الشبكة ببوابة التطبيق والموارد المرتبطة بها.

$backendSubnetConfig = New-AzVirtualNetworkSubnetConfig `
  -Name myBackendSubnet `
  -AddressPrefix 10.0.1.0/24

$agSubnetConfig = New-AzVirtualNetworkSubnetConfig `
  -Name myAGSubnet `
  -AddressPrefix 10.0.2.0/24

$vnet = New-AzVirtualNetwork `
  -ResourceGroupName myResourceGroupAG `
  -Location eastus `
  -Name myVNet `
  -AddressPrefix 10.0.0.0/16 `
  -Subnet $backendSubnetConfig, $agSubnetConfig

$pip = New-AzPublicIpAddress `
  -ResourceGroupName myResourceGroupAG `
  -Location eastus `
  -Name myAGPublicIPAddress `
  -AllocationMethod Dynamic

إنشاء بوابة تطبيق

إنشاء تكوينات IP ومنفذ الواجهة الأمامية

قم بربط الشبكة الفرعية التي قمت بإنشائها مسبقًا ببوابة التطبيق باستخدام New-AzApplicationGatewayIPConfiguration. قم بتعيين عنوان IP العام لبوابة التطبيق باستخدام New-AzApplicationGatewayFrontendIPConfig.

$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName myResourceGroupAG `
  -Name myVNet

$subnet=$vnet.Subnets[0]

$gipconfig = New-AzApplicationGatewayIPConfiguration `
  -Name myAGIPConfig `
  -Subnet $subnet

$fipconfig = New-AzApplicationGatewayFrontendIPConfig `
  -Name myAGFrontendIPConfig `
  -PublicIPAddress $pip

$frontendport = New-AzApplicationGatewayFrontendPort `
  -Name myFrontendPort `
  -Port 80

إنشاء أماكن تجميع الخلفية والإعدادات

إنشاء أول أماكن لتجميع العناوين الخلفية لبوابة التطبيق باستخدام New-AzApplicationGatewayBackendAddressPool. قم بتكوين إعدادات المجموعة باستخدام New-AzApplicationGatewayBackendHttpSetting.

$contosoPool = New-AzApplicationGatewayBackendAddressPool `
  -Name contosoPool

$fabrikamPool = New-AzApplicationGatewayBackendAddressPool `
  -Name fabrikamPool

$poolSettings = New-AzApplicationGatewayBackendHttpSettings `
  -Name myPoolSettings `
  -Port 80 `
  -Protocol Http `
  -CookieBasedAffinity Enabled `
  -RequestTimeout 120

إنشاء وحدات الاستماع والقواعد

وحدات الاستماع مطلوبة لتمكين بوابة التطبيق لمسار نسبة استخدام الشبكة بشكل مناسب إلى أماكن العناوين الخلفية. في هذه المقالة، يمكنك إنشاء اثنين من وحدات الاستماع للمجاليك . يتم إنشاء وحدات الاستماع للمجالات contoso.comfabrikam.com.

قم بإنشاء وحدة استماع باستخدام New-AzApplicationGatewayHttpListener مع التكوين الأمامي ومنفذ الواجهة الأمامية الذي قمت بإنشائه مسبقاً. يلزم وجود قاعدة لوحدة الاستماع لمعرفة أي مجموعة واجهة خلفية يستخدم لنسبة استخدام الشبكة الواردة. قم بإنشاء قاعدة أساسية تسمى contosoRule باستخدام New-AzApplicationGatewayRequestRoutingRule.

إشعار

باستخدام بوابة التطبيق أو WAF v2 SKU، يمكنك أيضًا تكوين ما يصل إلى 5 أسماء مضيف لكل مستمع ويمكنك استخدام أحرف البدل في اسم المضيف. للحصول على مزيد من المعلومات، راجع أسماء مضيف حرف البدل في وحدة الاستماع . لاستخدام أسماء مضيفين متعددة وأحرف بدل في وحدة استماع باستخدام Azure PowerShell، يجب استخدام -HostNames بدلا من -HostName . باستخدام اسم المضيف، يمكنك ذكر أسماء المضيفين حتى 5 كقيم مفصولة بفاصلة. على سبيل المثال، -HostNames "*.contoso.com","*.fabrikam.com"

$contosolistener = New-AzApplicationGatewayHttpListener `
  -Name contosoListener `
  -Protocol Http `
  -FrontendIPConfiguration $fipconfig `
  -FrontendPort $frontendport `
  -HostName "www.contoso.com"

$fabrikamlistener = New-AzApplicationGatewayHttpListener `
  -Name fabrikamListener `
  -Protocol Http `
  -FrontendIPConfiguration $fipconfig `
  -FrontendPort $frontendport `
  -HostName "www.fabrikam.com"

$contosoRule = New-AzApplicationGatewayRequestRoutingRule `
  -Name contosoRule `
  -RuleType Basic `
  -HttpListener $contosoListener `
  -BackendAddressPool $contosoPool `
  -BackendHttpSettings $poolSettings

$fabrikamRule = New-AzApplicationGatewayRequestRoutingRule `
  -Name fabrikamRule `
  -RuleType Basic `
  -HttpListener $fabrikamListener `
  -BackendAddressPool $fabrikamPool `
  -BackendHttpSettings $poolSettings

أضف أولوية إلى قواعد التحويل

$contosoRule = New-AzApplicationGatewayRequestRoutingRule `
  -Name wccontosoRule `
  -RuleType Basic `
  -Priority 200 `
  -HttpListener $wccontosoListener `
  -BackendAddressPool $wccontosoPool `
  -BackendHttpSettings $poolSettings

$fabrikamRule = New-AzApplicationGatewayRequestRoutingRule `
  -Name shopcontosoRule `
  -RuleType Basic `
  -Priority 100 `
  -HttpListener $shopcontosoListener `
  -BackendAddressPool $shopcontosoPool `
  -BackendHttpSettings $poolSettings

أنشئ بوابة التطبيق

الآن بعد إنشاء الموارد الداعمة الضرورية، حدّد معلمات لبوابة التطبيق المسماة باستخدام New-AzApplicationGatewaySku، ثم قم بإنشائها باستخدام New-AzApplicationGateway.

$sku = New-AzApplicationGatewaySku `
  -Name Standard_Medium `
  -Tier Standard `
  -Capacity 2

$appgw = New-AzApplicationGateway `
  -Name myAppGateway `
  -ResourceGroupName myResourceGroupAG `
  -Location eastus `
  -BackendAddressPools $contosoPool, $fabrikamPool `
  -BackendHttpSettingsCollection $poolSettings `
  -FrontendIpConfigurations $fipconfig `
  -GatewayIpConfigurations $gipconfig `
  -FrontendPorts $frontendport `
  -HttpListeners $contosoListener, $fabrikamListener `
  -RequestRoutingRules $contosoRule, $fabrikamRule `
  -Sku $sku

إنشاء مجموعات مقياس آلة افتراضية

في هذا المثال، تقوم بإنشاء مجموعتي تغيير سعة الجهاز الظاهري التي تدعم أماكن تجميع الواجهة الخلفية الاثنتين التي قمت بإنشائها. مجموعات تغيير السعة التي تقوم بإنشائها تسمي myvmss1 وmyvmss2. تحتوي كل مجموعة مقياس على مثيلين للجهاز الظاهري الذي تقوم بتثبيت IIS عليه. يمكنك تعيين المقياس لمجموعة الواجهة الخلفية عند تكوين إعدادات IP.

$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName myResourceGroupAG `
  -Name myVNet

$appgw = Get-AzApplicationGateway `
  -ResourceGroupName myResourceGroupAG `
  -Name myAppGateway

$contosoPool = Get-AzApplicationGatewayBackendAddressPool `
  -Name contosoPool `
  -ApplicationGateway $appgw

$fabrikamPool = Get-AzApplicationGatewayBackendAddressPool `
  -Name fabrikamPool `
  -ApplicationGateway $appgw

for ($i=1; $i -le 2; $i++)
{
  if ($i -eq 1) 
  {
    $poolId = $contosoPool.Id
  }
  if ($i -eq 2)
  {
    $poolId = $fabrikamPool.Id
  }

  $ipConfig = New-AzVmssIpConfig `
    -Name myVmssIPConfig$i `
    -SubnetId $vnet.Subnets[1].Id `
    -ApplicationGatewayBackendAddressPoolsId $poolId

  $vmssConfig = New-AzVmssConfig `
    -Location eastus `
    -SkuCapacity 2 `
    -SkuName Standard_DS2 `
    -UpgradePolicyMode Automatic

  Set-AzVmssStorageProfile $vmssConfig `
    -ImageReferencePublisher MicrosoftWindowsServer `
    -ImageReferenceOffer WindowsServer `
    -ImageReferenceSku 2016-Datacenter `
    -ImageReferenceVersion latest `
    -OsDiskCreateOption FromImage

  Set-AzVmssOsProfile $vmssConfig `
    -AdminUsername azureuser `
    -AdminPassword "Azure123456!" `
    -ComputerNamePrefix myvmss$i

  Add-AzVmssNetworkInterfaceConfiguration `
    -VirtualMachineScaleSet $vmssConfig `
    -Name myVmssNetConfig$i `
    -Primary $true `
    -IPConfiguration $ipConfig

  New-AzVmss `
    -ResourceGroupName myResourceGroupAG `
    -Name myvmss$i `
    -VirtualMachineScaleSet $vmssConfig
}

تثبيت IIS

$publicSettings = @{ "fileUris" = (,"https://raw.githubusercontent.com/Azure/azure-docs-powershell-samples/master/application-gateway/iis/appgatewayurl.ps1"); 
  "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File appgatewayurl.ps1" }

for ($i=1; $i -le 2; $i++)
{
  $vmss = Get-AzVmss `
    -ResourceGroupName myResourceGroupAG `
    -VMScaleSetName myvmss$i

  Add-AzVmssExtension -VirtualMachineScaleSet $vmss `
    -Name "customScript" `
    -Publisher "Microsoft.Compute" `
    -Type "CustomScriptExtension" `
    -TypeHandlerVersion 1.8 `
    -Setting $publicSettings

  Update-AzVmss `
    -ResourceGroupName myResourceGroupAG `
    -Name myvmss$i `
    -VirtualMachineScaleSet $vmss
}

إنشاء سجل CNAME في مجالك

بعد إنشاء بوابة التطبيق بعنوان IP العام الخاص بها، يمكنك الحصول على عنوان DNS واستخدامه لإنشاء سجل CNAME في مجالك. استخدم Get-AzPublicIPAddress للحصول على عنوانDNS العام لبوابة التطبيق. انسخ قيمة fqdn لإعدادات DNS واستخدمها كقيمة لسجل CNAME الذي تنشئه. لا ينصح باستخدام السجلات A لأن VIP قد تتغير عند إعادة تشغيل بوابة التطبيق في V1 SKU.

Get-AzPublicIPAddress -ResourceGroupName myResourceGroupAG -Name myAGPublicIPAddress

اختبار بوابة التطبيق

أدخل اسم مجالك في شريط العنوان في متصفحك. مثل http://www.contoso.com.

اختبار موقع contoso في بوابة التطبيق

غيّر العنوان إلى مجالك الآخر وسترى شيئًا مثل المثال التالي:

اختبار موقع fabrikam في بوابة التطبيق

تنظيف الموارد

عند عدم الحاجة إلى ذلك، قم بإزالة مجموعة الموارد وبوابة التطبيق وجميع الموارد ذات الصلة باستخدام Remove-AzResourceGroup.

Remove-AzResourceGroup -Name myResourceGroupAG

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

إنشاء بوابة تطبيق باستخدام قواعد التوجيه المستندة إلى مسار URL