Azure通配符域名如何限制仅允许指定子域名访问?
可行方案整理(按你提到的层级分类)
1. App Service层面(最轻量化,无额外服务成本)
- 用请求Host头校验实现,不需要受500个自定义域名绑定数量限制:
提前维护合法子域名白名单,所有请求进入业务逻辑前先校验Host请求头的值是否在白名单内,不在白名单的直接返回403状态码或者跳转到统一报错页,避免用户进入到登录等后续流程。
如果你不想修改业务代码,也可以用App Service运行环境自带的配置规则实现:- Windows运行环境可以直接在
Web.config里加重写规则,示例如下:
<rule name="SubdomainWhitelistCheck" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^(允许的子域名1\.oursite\.com|允许的子域名2\.oursite\.com)$" negate="true" /> </conditions> <action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="当前子域名未被授权访问" /> </rule>- Linux容器运行环境可以在Nginx/Apache的配置文件里加对应Host校验规则,逻辑和上面一致。
- Windows运行环境可以直接在
- 也可以用App Service内置的Easy Auth身份验证组件的前置校验能力,添加自定义HTTP头校验规则,请求到达你的应用之前就会拦截非法子域名的请求。
2. Azure Application Gateway(负载均衡)层面(适合已部署应用网关的场景)
如果你的App Service前端已经配置了Azure应用网关,直接在网关的WAF模块里加自定义拦截规则即可:
- 新建自定义规则,匹配逻辑设置为
当请求Host头不在预设子域名白名单内时,动作为「阻止」,非法请求会直接在网关层被拦截,不会转发到后端App Service,拦截效率比应用层更高。 - 子域名白名单可以批量维护在WAF规则组里,更新时不需要修改应用配置。
3. Traffic Manager层面(不推荐单独使用)
Traffic Manager属于DNS层面的流量调度服务,本身不支持HTTP Host头校验,只能通过「仅给合法子域名配置解析记录指向Traffic Manager」的方式实现限制,未配置的子域名无法解析到服务IP。但该方案需要给每个合法子域名单独配DNS记录,和你规避500个域名绑定限制的需求冲突,仅适合子域名数量较少的场景使用。
最优方案推荐:子域名数量远大于500的情况下优先选App Service层面的配置/代码校验,无额外成本,配置灵活;如果已经部署了应用网关,优先在WAF层做拦截,性能更好。
内容的提问来源于stack exchange,提问作者RashmiMs
相关产品推荐
相关产品推荐

