使用 Azure CLI 建立裝載多個網站的應用程式閘道

您可以使用 Azure CLI,在建立應用程式閘道時設定裝載多個網站。 在本文中,您可以使用虛擬機器擴展集來定義後端位址集區。 接著,您可以根據擁有的網域來設定接聽程式和規則,確保網路流量會抵達集區中的適當伺服器。 本文假設您擁有多個網域,並使用 www.contoso.comwww.fabrikam.com 的範例。

在本文中,您將學會如何:

  • 設定網路
  • 建立應用程式閘道
  • 建立後端接聽程式
  • 建立路由規則
  • 建立包含後端集區的虛擬機器擴展集
  • 在網域中建立 CNAME 記錄

Multi-site Application Gateway

如果您想要的話,可以使用 Azure PowerShell 完成本程序。

如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶

必要條件

  • 本教學課程需要 2.0.4 版或更新版本的 Azure CLI。 如果您是使用 Azure Cloud Shell,就已安裝最新版本。

建立資源群組

資源群組是在其中部署與管理 Azure 資源的邏輯容器。 使用 az group create 建立資源群組。

下列範例會在 eastus 位置建立名為 myResourceGroupAG 的資源群組。

az group create --name myResourceGroupAG --location eastus

建立網路資源

使用 az network vnet create 建立虛擬網路以及名為 myAGSubnet 的子網路。 然後您可以使用 az network vnet subnet create 新增後端伺服器所需的子網路。 使用 az network public-ip create 建立名為 myAGPublicIPAddress 的公用 IP 位址。

az network vnet create \
  --name myVNet \
  --resource-group myResourceGroupAG \
  --location eastus \
  --address-prefix 10.0.0.0/16 \
  --subnet-name myAGSubnet \
  --subnet-prefix 10.0.1.0/24

az network vnet subnet create \
  --name myBackendSubnet \
  --resource-group myResourceGroupAG \
  --vnet-name myVNet \
  --address-prefix 10.0.2.0/24

az network public-ip create \
  --resource-group myResourceGroupAG \
  --name myAGPublicIPAddress \
  --allocation-method Static \
  --sku Standard

建立應用程式閘道

您可以使用 az network application-gateway create 來建立應用程式閘道。 當您使用 Azure CLI 建立應用程式閘道時,需要指定設定資訊,例如容量、SKU 和 HTTP 設定。 應用程式閘道會指派給您先前建立的 myAGSubnet 和 myAGPublicIPAddress

az network application-gateway create \
  --name myAppGateway \
  --location eastus \
  --resource-group myResourceGroupAG \
  --vnet-name myVNet \
  --subnet myAGsubnet \
  --capacity 2 \
  --sku Standard_v2 \
  --http-settings-cookie-based-affinity Disabled \
  --frontend-port 80 \
  --http-settings-port 80 \
  --http-settings-protocol Http \
  --public-ip-address myAGPublicIPAddress \
  --priority 10

可能需要幾分鐘的時間來建立應用程式閘道。 建立應用程式閘道後,您可以看到它的這些新功能:

  • appGatewayBackendPool - 應用程式閘道必須至少有一個後端位址集區。
  • appGatewayBackendHttpSettings - 指定以連接埠 80 和 HTTP 通訊協定來進行通訊。
  • appGatewayHttpListener - 與 appGatewayBackendPool 相關聯的預設接聽程式。
  • appGatewayFrontendIP - 將 myAGPublicIPAddress 指派給 appGatewayHttpListener
  • rule1 - 與 appGatewayHttpListener 相關聯的預設路由規則。

新增後端集區

使用 az network application-gateway address-pool create,新增包含後端伺服器所需的後端集區

az network application-gateway address-pool create \
  --gateway-name myAppGateway \
  --resource-group myResourceGroupAG \
  --name contosoPool

az network application-gateway address-pool create \
  --gateway-name myAppGateway \
  --resource-group myResourceGroupAG \
  --name fabrikamPool

新增接聽程式

使用 az network application-gateway http-listener create,以新增路由流量時所需的接聽程式。

注意

透過應用程式閘道或 WAF v2 SKU,您也可以為每個接聽程式設定最多 5 個主機名稱,還可以在主機名稱中使用萬用字元。 如需詳細資訊,請參閱接聽程式中的萬用字元主機名稱。 若要使用 Azure CLI 在接聽程式中使用多個主機名稱和萬用字元,您必須使用 --host-names 而不是 --host-name。 使用主機名稱時,您最多可以提及五個主機名稱作為空格分隔值。 例如,--host-names "*.contoso.com *.fabrikam.com"

az network application-gateway http-listener create \
  --name contosoListener \
  --frontend-ip appGatewayFrontendIP \
  --frontend-port appGatewayFrontendPort \
  --resource-group myResourceGroupAG \
  --gateway-name myAppGateway \
  --host-name www.contoso.com

az network application-gateway http-listener create \
  --name fabrikamListener \
  --frontend-ip appGatewayFrontendIP \
  --frontend-port appGatewayFrontendPort \
  --resource-group myResourceGroupAG \
  --gateway-name myAppGateway \
  --host-name www.fabrikam.com

新增路由規則

未使用規則優先順序欄位時,規則會依照列出的順序進行處理。 系統會使用第一個相符的規則來引導流量,而不管指定。 例如,如果您在相同的連接埠上同時使用基本接聽程式的規則和多站台接聽程式的規則,則必須將多站台接聽程式的規則列於基本接聽程式的規則之前,多站台規則才能如預期般運作。

在此範例中,您會建立兩個新規則,並刪除您在部署應用程式閘道時所建立的預設規則。 您可以使用 az network application-gateway rule create 來新增規則。

az network application-gateway rule create \
  --gateway-name myAppGateway \
  --name contosoRule \
  --resource-group myResourceGroupAG \
  --http-listener contosoListener \
  --rule-type Basic \
  --address-pool contosoPool \
  --priority 200

az network application-gateway rule create \
  --gateway-name myAppGateway \
  --name fabrikamRule \
  --resource-group myResourceGroupAG \
  --http-listener fabrikamListener \
  --rule-type Basic \
  --address-pool fabrikamPool \
  --priority 100

az network application-gateway rule delete \
  --gateway-name myAppGateway \
  --name rule1 \
  --resource-group myResourceGroupAG

新增路由規則的優先順序

為了確保先處理較特定的規則,請使用規則優先順序欄位來確保規則具有較高的優先順序。 所有現有的要求路由規則都必須設定規則優先順序欄位,而稍後建立的任何新規則也必須有規則優先順序值。

az network application-gateway rule create \
  --gateway-name myAppGateway \
  --name contosoRule \
  --resource-group myResourceGroupAG \
  --http-listener contosoListener \
  --rule-type Basic \
  --priority 200 \
  --address-pool contosoPool

az network application-gateway rule create \
  --gateway-name myAppGateway \
  --name fabrikamRule \
  --resource-group myResourceGroupAG \
  --http-listener fabrikamListener \
  --rule-type Basic \
  --priority 100 \
  --address-pool fabrikamPool

建立虛擬機器擴展集

在此範例中,您會建立三個虛擬機器擴展集,以支援應用程式閘道中的三個後端集區。 您所建立的擴展集名為 myvmss1、myvmss2 和 myvmss3。 每個擴展集都會包含兩個您安裝 IIS 的虛擬機器執行個體。

for i in `seq 1 2`; do

  if [ $i -eq 1 ]
  then
    poolName="contosoPool"
  fi

  if [ $i -eq 2 ]
  then
    poolName="fabrikamPool"
  fi

  az vmss create \
    --name myvmss$i \
    --resource-group myResourceGroupAG \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --admin-password Azure123456! \
    --instance-count 2 \
    --vnet-name myVNet \
    --subnet myBackendSubnet \
    --vm-sku Standard_D1_v2 \
    --upgrade-policy-mode Automatic \
    --app-gateway myAppGateway \
    --backend-pool-name $poolName
done

安裝 NGINX

for i in `seq 1 2`; do

  az vmss extension set \
    --publisher Microsoft.Azure.Extensions \
    --version 2.0 \
    --name CustomScript \
    --resource-group myResourceGroupAG \
    --vmss-name myvmss$i \
    --settings '{ "fileUris": ["https://raw.githubusercontent.com/Azure/azure-docs-powershell-samples/master/application-gateway/iis/install_nginx.sh"],
  "commandToExecute": "./install_nginx.sh" }'

done

在網域中建立 CNAME 記錄

在以公用 IP 位址建立應用程式閘道之後,您可以取得 DNS 位址並用以在網域中建立 CNAME 記錄。 您可以使用 az network public-ip show 來取得應用程式閘道的 DNS 位址。 複製 DNSSettings 的 fqdn 值,並用來作為所建立 CNAME 記錄的值。

az network public-ip show \
  --resource-group myResourceGroupAG \
  --name myAGPublicIPAddress \
  --query [dnsSettings.fqdn] \
  --output tsv

不建議使用 A 記錄,因為重新啟動應用程式閘道時,可能會變更 VIP。

測試應用程式閘道

在瀏覽器的網址列中輸入您的網域名稱。 例如 http://www.contoso.com.

Test contoso site in application gateway

將位址變更為您的另一個網域,您應該會看到類似下列的範例:

Test fabrikam site in application gateway

清除資源

若不再需要,可移除資源群組、應用程式閘道和所有相關資源。

az group delete --name myResourceGroupAG

下一步

建立包含 URL 路徑型路由規則的應用程式閘道