Azure应用网关路径路由失效:请求始终跳转至默认后端池
问题排查与解决方案
一、修正路径路由规则的路径配置
当前规则的路径和需求不匹配且存在拼写错误,先调整为:
- 规则1(对应functionapp1):
- 路径改为:
/abc/functionapp1/* - 目标后端池:functionapp1bp
- 路径改为:
- 规则2(对应functionapp2):
- 路径改为:
/def/functionapp2/* - 目标后端池:functionapp2bp
- 路径改为:
注意:用
*通配符匹配该路径下所有子路径,确保任意函数路径都能命中;同时修正第二个规则的路径前缀从/abc改为/def,和需求保持一致。
二、配置URL重写规则(关键步骤)
Azure Functions的函数访问必须带/api/前缀,需为每个后端池单独配置带重写的后端设置:
- 针对functionapp1的后端设置(新建或修改):
- 启用URL重写
- 重写规则配置:
- 源模式:
^/abc/functionapp1/(.*) - 目标模式:
/api/{R:1} - 重写类型:重写URL
- 源模式:
- 针对functionapp2的后端设置:
- 启用URL重写
- 重写规则配置:
- 源模式:
^/def/functionapp2/(.*) - 目标模式:
/api/{R:1} - 重写类型:重写URL
- 源模式:
不要使用默认backendsetting,必须为每个后端池单独配置带重写的后端设置,否则重写逻辑无法生效。
三、调整规则优先级
将两个自定义路径路由规则的优先级设为高于默认后端池规则。应用网关按规则顺序匹配,先命中的规则生效,确保自定义规则优先被匹配。
四、确认路径匹配模式
在路径规则配置中,选择**通配符匹配(Wildcard)**模式,确保*能正确匹配后续任意子路径,避免因匹配模式错误导致规则失效。
五、测试验证
完成配置后,测试以下场景:
- 访问
https://test.air.be/abc/functionapp1/function1,应路由到functionapp1的/api/function1 - 访问
https://test.air.be/def/functionapp2/function2,应路由到functionapp2的/api/function2 - 访问未匹配的路径(如
https://test.air.be/other),才会跳转至默认后端池
内容的提问来源于stack exchange,提问作者Sharat Bhaskar
相关产品推荐
相关产品推荐

