如何通过Azure应用程序网关将所有流量路由到指定站点路径
问题根因
你出现重定向次数过多的核心原因是配置重写/重定向规则时没有添加路径前缀判断逻辑,导致已经带有/us前缀的请求仍会被重复添加前缀,形成/→/us→/us/us→/us/us/us的无限循环。
配置方案
首先根据你的业务需求选择以下两类配置:
场景1:地址栏不改变,仅后端App Service接收路径自动追加/us前缀(URL重写)
进入美国区应用网关的「重写规则」功能,按如下规则配置:
- 新建重写规则集,关联到当前绑定
stackoverflow.devops.com域名的路由规则 - 新增重写规则,设置优先级为10
- 首先添加触发条件,仅路径不带有
/us前缀时才执行重写:- 条件类型:服务器变量
- 服务器变量:
request_uri - 运算符:不匹配
- 模式:
^/us(/.*)?$ - 取消勾选「区分大小写」
- 配置重写动作:
- 重写类型:URL
- 操作:重写
- URL路径:
/us{var_request_uri} - 勾选「保留查询字符串」
- 保存规则后等待网关配置生效即可。
场景2:地址栏显示/us前缀,客户端可见路径变更(URL重定向)
优先使用路由规则的重定向动作实现,无需配置重写规则:
- 进入美国区应用网关的「路由规则」页面
- 新建第一条路由规则,优先级设为10:
- 绑定当前
stackoverflow.devops.com对应的监听器 - 匹配路径:
/us/* - 后端目标:选择你共用的App Service后端池
- HTTP设置:使用你原有正常可用的HTTP配置(确保主机名重写为
stackoverflow.devops.com和后端App Service匹配)
- 绑定当前
- 新建第二条路由规则,优先级设为20:
- 绑定相同的监听器
- 匹配路径:
/* - 动作类型:重定向
- 重定向类型:测试阶段选302临时重定向,确认生效后可改为301永久重定向
- 目标协议:与原始请求一致
- 主机名:填写
stackoverflow.devops.com - 路径:填写
/us{path} - 勾选「附加查询字符串」
- 保存规则后等待网关生效即可。
注意事项
- 配置前确认后端App Service没有额外的路径重定向规则,避免和应用网关规则冲突
- 测试时可执行
curl -I https://stackoverflow.devops.com查看返回头,/请求的响应头Location应为/us路径,/us路径的请求应返回200状态码,不会出现多次重定向。
内容的提问来源于stack exchange,提问作者KieranJamess
相关产品推荐
相关产品推荐

