如何使用重写规则限制 Azure Web 应用的网站访问
问题描述
当 Azure Web 应用中有两个网站 A 和 B,现在要令 B 网站只允许 A 网站进行访问,不容许其他的网站访问,该如何进行配置?
问题分析
对于所有用户只要网站部署在同一个 FTPS 区域,那么它们的 Web 应用入口 ip(访问 Azure Web 应用的 ip)和 出口 ip(Azure Web 应用访问其他服务的 ip)都是一样的。由于 Azure Web 应用服务这样共享架构的设计,无法通过限制 ip 来阻止访问。而且入口 ip 和出口 ip 也是不同的,出口 ip 有 4 个是随机分配的。由于出口 ip 是随机的,也是无法通过限制域名来阻止访问。因此目前可以在应用层方面配置 rewrite 规则,只有符合某种条件才可以访问网站 B。
解决方法
用户可以通过站点的 web.config 文件配置 rewrite 规则,并将该配置上传到 site/wwwroot/ 目录下。下面是网站 Web 应用 B 只允许 url 包含 password=123456 才能访问配置。在 rewrite 下添加如下的配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="role1" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".*" negate="false" />
<action type="CustomResponse" statusCode="403" statusReason="TypeInReasonHere" statusDescription="TypeInDescriptionHere" />
<conditions>
<add input="{QUERY_STRING}" pattern="^.*password=123456.*$" negate="true" />
</conditions>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
只有通过 password=123456 才可以被访问,其他 url 都无法访问。不同的 url 访问结果如下图所示:
关于 rewrite 相关配置可以参考链接:URL Rewrite Module 参考配置