如何在Azure App Service/Web App强制仅HTTPS访问(阻断HTTP而非重定向)
Azure App Service 实现仅响应HTTPS请求的可行方案
方案1:使用应用服务自定义访问规则(无需修改代码,推荐)
你可以在Azure门户的App Service配置页,找到「网络」选项下的「访问限制」功能,添加自定义规则:
- 匹配条件:请求协议为
HTTP - 操作:选择「拒绝」,设置返回状态码为
400 Bad Request或者403 Forbidden - 优先级设置为最高(比如10),保证优先匹配所有HTTP请求
配置完成后所有访问80端口的HTTP请求会被Azure前端节点直接拦截返回错误,不会到达你的应用代码,也不会触发重定向。
方案2:应用代码层拦截(适配所有部署环境)
如果不想修改Azure云侧配置,可以在ASP.NET Core应用中添加中间件,在请求管道的最前面拦截HTTP请求:
// Program.cs 中,放在所有中间件注册的最前面 app.Use(async (context, next) => { if (!context.Request.IsHttps) { context.Response.StatusCode = StatusCodes.Status400BadRequest; await context.Response.CompleteAsync(); return; } await next(); });
该方案无需绑定域名,所有非HTTPS请求都会被直接拒绝,不受App Service的「HTTPS Only」开关影响,也不需要同步维护自定义域名配置。
方案3:IIS配置拦截(仅适用于Windows托管的App Service)
如果你的应用托管在Windows环境的App Service上,可以在站点根目录的Web.config中添加规则,直接拦截HTTP请求:
<system.webServer> <rewrite> <rules> <rule name="Reject HTTP" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTPS}" pattern="off" /> </conditions> <action type="CustomResponse" statusCode="400" statusReason="Bad Request" statusDescription="Only HTTPS requests are allowed" /> </rule> </rules> </rewrite> </system.webServer>
注意配置完成后需要关闭App Service的「HTTPS Only」开关,避免云侧先触发重定向,导致自定义规则不生效。
内容的提问来源于stack exchange,提问作者cmeeren
相关产品推荐
相关产品推荐

