如何基于Azure应用网关重写功能实现可脚本启停的多场景维护页
基于Azure应用网关重写规则实现多场景可控维护页重定向
要实现需求,你可以通过Azure应用网关的重写规则集配置路径匹配的重定向规则,再用Azure CLI/PowerShell脚本控制规则的启用/禁用,全程无需手动操作门户。
步骤1:准备维护页
提前部署静态维护页(比如用Azure存储静态网站、自有静态托管服务),记录维护页的完整URL(例如https://your-maintenance-host.com/maintenance.html)。
步骤2:配置应用网关重写规则集
创建重写规则集
- 进入目标应用网关的Azure门户页面,左侧菜单选择「重写」>「规则集」>「添加」,为规则集命名(例如
MaintenanceRewriteSet)。 - 点击「添加规则」,开始配置3个场景的独立重定向规则。
配置单场景重定向规则(以场景1为例)
每个场景规则仅路径匹配条件不同,其余配置逻辑一致:
- 规则名称:比如
Maintenance-Rule-App1(对应场景1路径/app1/*) - 优先级:设置为低于业务规则的数值(数值越小优先级越高,确保维护规则优先触发)
- 匹配条件:
- 类型选「路径」,匹配类型选「前缀匹配」,路径值填对应场景的路径(如
/app1/) - 可选:添加开关匹配条件(比如请求头
X-Maintenance-Enable等于true,用于更精细的流量控制)
- 类型选「路径」,匹配类型选「前缀匹配」,路径值填对应场景的路径(如
- 操作:
- 类型选「重定向」,重定向类型选「已找到(302)」(临时重定向,避免浏览器缓存)
- 目标URL填入维护页完整地址
- 按需勾选「保留路径」「保留查询字符串」(不需要原路径信息可取消)
重复上述步骤,分别创建场景2(如路径/app2/*)、场景3(如路径/admin/*)的重定向规则,完成后将规则集关联到目标路由/监听规则。
步骤3:脚本启停维护机制
使用Azure CLI或PowerShell脚本,实现对规则集或单个场景规则的启用/禁用控制:
Azure CLI 控制规则集启停
# 启用整个维护规则集 az network application-gateway rewrite-rule set update \ --resource-group your-resource-group \ --gateway-name your-app-gateway \ --name MaintenanceRewriteSet \ --enabled true # 禁用整个维护规则集 az network application-gateway rewrite-rule set update \ --resource-group your-resource-group \ --gateway-name your-app-gateway \ --name MaintenanceRewriteSet \ --enabled false
Azure CLI 控制单个场景规则启停
如果需要单独启停某场景的维护(比如仅启用场景1):
# 启用场景1的重写规则 az network application-gateway rewrite-rule update \ --resource-group your-resource-group \ --gateway-name your-app-gateway \ --rule-set-name MaintenanceRewriteSet \ --name Maintenance-Rule-App1 \ --enabled true # 禁用场景1的重写规则 az network application-gateway rewrite-rule update \ --resource-group your-resource-group \ --gateway-name your-app-gateway \ --rule-set-name MaintenanceRewriteSet \ --name Maintenance-Rule-App1 \ --enabled false
PowerShell 控制规则状态
# 连接Azure账户 Connect-AzAccount # 获取目标应用网关 $appGw = Get-AzApplicationGateway -Name "your-app-gateway" -ResourceGroupName "your-resource-group" # 启用整个维护规则集 $ruleSet = $appGw.RewriteRuleSets | Where-Object { $_.Name -eq "MaintenanceRewriteSet" } $ruleSet.Enabled = $true Set-AzApplicationGateway -ApplicationGateway $appGw # 禁用单个场景规则 $targetRule = $ruleSet.RewriteRules | Where-Object { $_.Name -eq "Maintenance-Rule-App1" } $targetRule.Enabled = $false Set-AzApplicationGateway -ApplicationGateway $appGw
注意事项
- 确保维护规则的优先级高于业务规则,避免被覆盖。
- 优先使用302临时重定向,维护结束后用户访问会自动恢复正常,无需清理浏览器缓存。
- 测试阶段可添加IP匹配条件,仅让内部测试IP触发重定向,避免影响正常访客。
内容的提问来源于stack exchange,提问作者balaganesh
相关产品推荐
相关产品推荐

