身為管理 Web 流量的 IT 系統管理員,您會想協助客戶和使用者盡快取得他們所需的資訊。 讓使用者獲得最佳體驗的方法之一,就是將不同種類的 Web 流量路由傳送到不同的伺服器資源。 本文說明如何針對來自您應用程式的不同流量類型,使用 Azure CLI 來安裝及設定應用程式閘道路由。 路由接著會根據 URL,將流量導向不同的伺服器集區。
在本文中,您將學會如何:
- 為您所需的網路資源建立資源群組
- 建立網路資源
- 針對來自您應用程式的流量,建立應用程式閘道
- 針對不同類型的流量,指定伺服器集區和路由規則
- 建立每個集區的擴展集,以便自動調整集區
- 執行測試,以便確認不同類型的流量會前往正確的集區
您可以依偏好使用 Azure PowerShell 或 Azure 入口網站來完成此程序。
如果您沒有 Azure 帳戶,請在開始之前建立 免費帳戶 。
先決條件
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱開始使用 Azure Cloud Shell。
若要在本機執行 CLI 參考命令,請安裝 (部分機器翻譯) Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱如何在 Docker 容器中執行 Azure CLI。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,以完成驗證流程。 如需其他登入選項,請參閱 使用 Azure CLI 向 Azure 進行驗證。
出現提示時,請在第一次使用時安裝 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
建立網路資源
使用 建立名為 myVNet 的虛擬網路,以及名為 myAGSubnetaz network vnet create 的子網路。 然後使用 新增名為 myBackendSubnetaz network vnet subnet create 的子網路,後端伺服器需要該子網路。 使用 建立名為 myAGPublicIPAddressaz network public-ip create 的公用 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
建立包含 URL 對應的應用程式閘道
使用 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_v2 \
--http-settings-cookie-based-affinity Disabled \
--frontend-port 80 \
--http-settings-port 80 \
--http-settings-protocol Http \
--public-ip-address myAGPublicIPAddress \
--priority 100
可能需要幾分鐘的時間來建立應用程式閘道。 建立應用程式閘道後,您可以看到這些新功能:
| 功能 | 描述 |
|---|---|
| appGatewayBackendPool | 應用程式閘道必須至少有一個後端位址集區。 |
| 應用程式閘道後端HTTP設置 (appGatewayBackendHttpSettings) | 指定以連接埠 80 和 HTTP 通訊協定來進行通訊。 |
| appGatewayHttpListener | 與 appGatewayBackendPool 相關聯的預設接聽程式。 |
| appGatewayFrontendIP | 將 myAGPublicIPAddress 指派給 appGatewayHttpListener。 |
| rule1 | 與 appGatewayHttpListener 相關聯的預設路由規則。 |
新增映像和視訊後端集區及連接埠
使用 ,將名為 imagesBackendPool 和 videoBackendPoolaz network application-gateway address-pool create 的後端集區新增至應用程式閘道。 使用 az network application-gateway frontend-port create 新增集區的前端連接埠。
az network application-gateway address-pool create \
--gateway-name myAppGateway \
--resource-group myResourceGroupAG \
--name imagesBackendPool
az network application-gateway address-pool create \
--gateway-name myAppGateway \
--resource-group myResourceGroupAG \
--name videoBackendPool
az network application-gateway frontend-port create \
--port 8080 \
--gateway-name myAppGateway \
--resource-group myResourceGroupAG \
--name port8080
新增後端接聽程式
使用 新增名為 backendListeneraz network application-gateway http-listener create、路由流量所需的後端接聽程式。
az network application-gateway http-listener create \
--name backendListener \
--frontend-ip appGatewayFrontendIP \
--frontend-port port8080 \
--resource-group myResourceGroupAG \
--gateway-name myAppGateway
新增 URL 路徑對應
URL 路徑對應可確保特定 URL 會路由傳送到特定的後端集區。 使用 和 ,建立名為 imagePathRuleaz network application-gateway url-path-map create 和 videoPathRuleaz network application-gateway url-path-map rule create 的 URL 路徑對應。
az network application-gateway url-path-map create \
--gateway-name myAppGateway \
--name myPathMap \
--paths /images/* \
--resource-group myResourceGroupAG \
--address-pool imagesBackendPool \
--default-address-pool appGatewayBackendPool \
--default-http-settings appGatewayBackendHttpSettings \
--http-settings appGatewayBackendHttpSettings \
--rule-name imagePathRule
az network application-gateway url-path-map rule create \
--gateway-name myAppGateway \
--name videoPathRule \
--resource-group myResourceGroupAG \
--path-map-name myPathMap \
--paths /video/* \
--address-pool videoBackendPool \
--http-settings appGatewayBackendHttpSettings
新增路由規則
路由規則會將 URL 對應與您所建立的接聽程式產生關聯。 使用 新增名為 rule2az network application-gateway rule create 的規則。
az network application-gateway rule create \
--gateway-name myAppGateway \
--name rule2 \
--resource-group myResourceGroupAG \
--http-listener backendListener \
--rule-type PathBasedRouting \
--url-path-map myPathMap \
--address-pool appGatewayBackendPool \
--priority 200
建立虛擬機器擴展集
在本文中,您會建立三個虛擬機器擴展集,以支援您所建立的三個後端集區。 建立名為 myvmss1、myvmss2 和 myvmss3 的擴展集。 每個擴展集都會包含兩個您安裝 NGINX 的虛擬機器執行個體。
for i in `seq 1 3`; do
if [ $i -eq 1 ]
then
poolName="appGatewayBackendPool"
fi
if [ $i -eq 2 ]
then
poolName="imagesBackendPool"
fi
if [ $i -eq 3 ]
then
poolName="videoBackendPool"
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_DS2 \
--upgrade-policy-mode Automatic \
--app-gateway myAppGateway \
--backend-pool-name $poolName
done
安裝 NGINX
for i in `seq 1 3`; 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
測試應用程式閘道
若要取得應用程式閘道的公用 IP 位址,請使用 az network public-ip show。 將公用 IP 位址複製並貼到您瀏覽器的網址列。 例如 http://40.121.222.19、http://40.121.222.19:8080/images/test.htm 或 http://40.121.222.19:8080/video/test.htm。
az network public-ip show \
--resource-group myResourceGroupAG \
--name myAGPublicIPAddress \
--query [ipAddress] \
--output tsv
將 URL 變更為 http://<ip-address>:8080/images/test.html、使用您的 IP 位址取代 <ip-address>,您應該會看到類似下列的範例:
將 URL 變更為 http://<ip-address>:8080/video/test.html、使用您的 IP 位址取代 <ip-address>,您應該會看到類似下列的範例。
清除資源
若不再需要,可移除資源群組、應用程式閘道和所有相關資源。
az group delete --name myResourceGroupAG