使用 Azure CLI 以建立具有內部重新導向的應用程式閘道
您可以使用 Azure CLI,在建立應用程式閘道時設定 Web 流量重新導向。 在本教學課程中,您將使用虛擬機器擴展集來定義後端集區。 接著,您可以根據擁有的網域來設定接聽程式和規則,以確保網路流量會抵達適當的集區。 本教學課程假設您擁有多個網域,並使用 www.contoso.com 和 www.contoso.org 的範例。
在本文中,您將學會如何:
- 設定網路
- 建立應用程式閘道
- 新增接聽程式和重新導向規則
- 建立包含後端集區的虛擬機器擴展集
- 在網域中建立 CNAME 記錄
如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶。
必要條件
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
- 本教學課程需要 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 建立名為 myVNet 的虛擬網路,以及名為 myAGSubnet 的子網路。 然後您可以使用 az network vnet subnet create,以新增伺服器後端集區所需且名為 myBackendSubnet 的子網路。 使用 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
建立應用程式閘道
您可以使用 az network application-gateway create 來建立名為 myAppGateway 的應用程式閘道。 當您使用 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_Medium \
--http-settings-cookie-based-affinity Disabled \
--frontend-port 80 \
--http-settings-port 80 \
--http-settings-protocol Http \
--public-ip-address myAGPublicIPAddress
可能需要幾分鐘的時間來建立應用程式閘道。 建立應用程式閘道後,您可以看到它的這些新功能:
- appGatewayBackendPool - 應用程式閘道必須至少有一個後端位址集區。
- appGatewayBackendHttpSettings - 指定以連接埠 80 和 HTTP 通訊協定來進行通訊。
- appGatewayHttpListener - 與 appGatewayBackendPool 相關聯的預設接聽程式。
- appGatewayFrontendIP - 將 myAGPublicIPAddress 指派給 appGatewayHttpListener。
- rule1 - 與 appGatewayHttpListener 相關聯的預設路由規則。
新增接聽程式和規則
需要接聽程式才能讓應用程式閘道將流量適當地路由到後端集區。 在本教學課程中,您會為兩個網域建立兩個接聽程式。 在此範例中,會為 www.contoso.com 和 www.contoso.org 網域建立接聽程式。
使用 az network application-gateway http-listener create,以新增路由流量時所需的後端接聽程式。
az network application-gateway http-listener create \
--name contosoComListener \
--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 contosoOrgListener \
--frontend-ip appGatewayFrontendIP \
--frontend-port appGatewayFrontendPort \
--resource-group myResourceGroupAG \
--gateway-name myAppGateway \
--host-name www.contoso.org
新增重新導向設定
使用 az network application-gateway redirect-config create,將流量從 www.contoso.org 傳送至應用程式閘道中 www.contoso.com 的接聽程式。
az network application-gateway redirect-config create \
--name orgToCom \
--gateway-name myAppGateway \
--resource-group myResourceGroupAG \
--type Permanent \
--target-listener contosoListener \
--include-path true \
--include-query-string true
新增路由規則
系統會依據規則的建立順序來處理規則,而且會根據傳送至應用程式閘道的 URL,使用符合 URL 的第一條規則將流量導向。 例如,如果您在相同的連接埠上同時使用基本接聽程式的規則和多站台接聽程式的規則,則必須將多站台接聽程式的規則列於基本接聽程式的規則之前,多站台規則才能如預期般運作。
在此範例中,您會建立兩個新規則,並刪除之前所建立的預設規則。 您可以使用 az network application-gateway rule create 來新增規則。
az network application-gateway rule create \
--gateway-name myAppGateway \
--name contosoComRule \
--resource-group myResourceGroupAG \
--http-listener contosoComListener \
--rule-type Basic \
--address-pool appGatewayBackendPool
az network application-gateway rule create \
--gateway-name myAppGateway \
--name contosoOrgRule \
--resource-group myResourceGroupAG \
--http-listener contosoOrgListener \
--rule-type Basic \
--redirect-config orgToCom
az network application-gateway rule delete \
--gateway-name myAppGateway \
--name rule1 \
--resource-group myResourceGroupAG
建立虛擬機器擴展集
在此範例中,您會建立一個虛擬機器擴展集,以支援您所建立的後端集區。 您建立的擴展集名為 myvmss,且會包含您安裝 NGINX 的兩個虛擬機器執行個體。
az vmss create \
--name myvmss \
--resource-group myResourceGroupAG \
--image Ubuntu2204 \
--admin-username azureuser \
--admin-password Azure123456! \
--instance-count 2 \
--vnet-name myVNet \
--subnet myBackendSubnet \
--vm-sku Standard_DS2 \
--upgrade-policy-mode Automatic \
--app-gateway myAppGateway \
--backend-pool-name appGatewayBackendPool
安裝 NGINX
在殼層視窗中執行此命令:
az vmss extension set \
--publisher Microsoft.Azure.Extensions \
--version 2.0 \
--name CustomScript \
--resource-group myResourceGroupAG \
--vmss-name myvmss \
--settings '{ "fileUris": ["https://raw.githubusercontent.com/Azure/azure-docs-powershell-samples/master/application-gateway/iis/install_nginx.sh"],
"commandToExecute": "./install_nginx.sh" }'
在網域中建立 CNAME 記錄
在以公用 IP 位址建立應用程式閘道之後,您可以取得 DNS 位址並用以在網域中建立 CNAME 記錄。 您可以使用 az network public-ip show 來取得應用程式閘道的 DNS 位址。 複製 DNSSettings 的 fqdn 值,並用來作為所建立 CNAME 記錄的值。 不建議使用 A-records,因為重新啟動應用程式閘道時,可能會變更 VIP。
az network public-ip show \
--resource-group myResourceGroupAG \
--name myAGPublicIPAddress \
--query [dnsSettings.fqdn] \
--output tsv
測試應用程式閘道
在瀏覽器的網址列中輸入您的網域名稱。 例如 http://www.contoso.com.
將位址變更為您其他的網域 (例如 http://www.contoso.org ),就應該會看到流量已重新導向回 www.contoso.com 的接聽程式。
下一步
在本教學課程中,您已了解如何:
- 設定網路
- 建立應用程式閘道
- 新增接聽程式和重新導向規則
- 建立包含後端集區的虛擬機器擴展集
- 在網域中建立 CNAME 記錄