如何配置Azure Web Apps基于路径的URL重定向(保留根域名)
配置Azure Web Apps实现同域名路径分流
要实现www.example.com指向app1、www.example.com/app2指向app2且域名保持不变,有两种实用方案,根据你的场景选择:
方案一:使用Azure Front Door(推荐,适合生产环境)
这是Azure官方推荐的多应用路由方案,支持高可用、负载均衡和缓存:
创建Front Door实例
- 登录Azure门户,搜索并创建「Front Door和CDN配置文件」
- 添加前端主机:输入
www.example.com,按照提示完成域名验证(添加DNS TXT记录,和之前给app1配置域名的流程一致)
配置后端池
- 在Front Door的「后端池」页面,添加两个后端:
- 后端1:指向app1的默认域名(如
app1.azurewebsites.net),设置优先级为1 - 后端2:指向app2的默认域名(如
app2.azurewebsites.net),设置优先级为1
- 后端1:指向app1的默认域名(如
- 确保后端的健康检查正常(默认配置即可)
- 在Front Door的「后端池」页面,添加两个后端:
配置路由规则
- 创建第一条路由规则:
- 路径匹配:
/* - 后端池选择app1的后端池
- 接受HTTP/HTTPS协议,启用HTTPS重定向
- 路径匹配:
- 创建第二条路由规则(优先级高于第一条):
- 路径匹配:
/app2/* - 后端池选择app2的后端池
- 开启「路径重写」,设置为
/{R:1}(将/app2/xxx转发到app2的/xxx)
- 路径匹配:
- 创建第一条路由规则:
更新DNS解析
- 将
www.example.com的DNS记录从原来指向app1的IP/CNAME,修改为指向Front Door提供的前端域名(或IP)
- 将
方案二:在app1中配置反向代理(轻量方案,无需额外服务)
如果不想新增Front Door服务,可以在app1中通过反向代理将/app2路径的请求转发到app2:
针对ASP.NET/ASP.NET Core应用
- 登录Azure门户,进入app1的「配置」>「常规设置」,开启「反向代理」开关
- 修改app1根目录下的
web.config,添加重写规则:<configuration> <system.webServer> <rewrite> <rules> <rule name="Forward to app2" stopProcessing="true"> <match url="^app2/(.*)" /> <action type="Rewrite" url="https://app2.azurewebsites.net/{R:1}" /> <serverVariables> <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" /> <set name="HTTP_ACCEPT_ENCODING" value="" /> </serverVariables> </rule> </rules> <outboundRules> <rule name="Restore Accept Encoding"> <match serverVariable="HTTP_ACCEPT_ENCODING" pattern="^$" /> <action type="Rewrite" value="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" /> </rule> </outboundRules> </rewrite> </system.webServer> </configuration>
针对Node.js应用
安装
http-proxy-middleware依赖:npm install http-proxy-middleware --save在app的入口文件(如
app.js)中添加代理配置:const express = require('express'); const { createProxyMiddleware } = require('http-proxy-middleware'); const app = express(); // 代理/app2路径到app2 app.use('/app2', createProxyMiddleware({ target: 'https://app2.azurewebsites.net', changeOrigin: true, pathRewrite: { '^/app2': '' }, secure: true })); // 保留app1自身的路由 app.get('/', (req, res) => { res.send('app1 homepage'); }); app.listen(process.env.PORT || 3000);测试与注意事项
- 访问
www.example.com/app2验证是否正常转发,地址栏域名保持不变 - 确保app2没有IP限制,允许来自app1的请求
- 若使用HTTPS,需确保app1和app2都配置了有效的SSL证书
- 访问
内容的提问来源于stack exchange,提问作者Sudhakar
相关产品推荐
相关产品推荐

