Azure中两个Web App实现原IIS跨站虚拟目录资源访问方案咨询
解决方案汇总
下面是3种经过验证的可行配置方式,你可以根据自身业务场景选择:
方案1:将共享资源迁移到Azure存储账户(推荐)
这个方案最符合云原生架构,后续扩展其他站点共享也最方便:
- 把Engine站点下存放图片、PDF的子目录所有资源上传到Azure Blob存储的独立容器中,配置容器的公共访问级别为Blob(匿名读取访问)
- 在Consumer站点的配置文件里把原来指向虚拟目录的资源路径前缀,统一替换为Blob容器的访问前缀
- 可选配置自定义域名绑定到Blob存储,保持路径和原有形式一致
- 优势:不需要修改两个应用的代码,性能比直接调用另一站点更高,还可以搭配CDN做全球加速,存储成本也比存到Web App本地低
方案2:配置反向代理实现路径映射
如果不想改资源存储位置,要保持原来的路径结构,可以用Azure Web App自带的反向代理功能实现:
- 进入Consumer Web App的Azure管理页,在开发工具分类下找到高级工具(Kudu),进入站点根目录的
site/wwwroot文件夹 - 如果根目录没有
web.config文件就新建,已有的话就编辑,在文件中添加如下反向代理规则:
<configuration> <system.webServer> <rewrite> <rules> <rule name="Proxy_Engine_Resources" stopProcessing="true"> <!-- 匹配原来的虚拟目录路径,比如原来虚拟目录叫/shared-res,就填/shared-res/(.*) --> <match url="^shared-res/(.*)" /> <action type="Rewrite" url="https://[你的Engine站点域名]/[资源子目录路径]/{R:1}" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
- 保存配置后重启Consumer Web App即可生效
- 注意:如果Engine站点开启了IP限制,需要把Consumer Web App的出站IP加到Engine的访问白名单里
方案3:给Engine站点配置跨域资源共享(CORS),直接调用Engine的资源路径
如果能接受资源路径直接显示Engine的域名,配置最简单:
- 进入Engine Web App的Azure管理页,找到API分类下的CORS配置
- 添加Consumer站点的域名到允许的源列表,勾选允许凭据(如果需要的话),保存配置
- 把Consumer站点里所有指向原来虚拟目录的资源链接,直接替换为Engine站点对应的资源完整路径即可
内容的提问来源于stack exchange,提问作者mustang888
相关产品推荐
相关产品推荐

