如何让Azure App Service运行状况检查适配.NET Framework 4.8 Web API
问题分析与解决方案
健康检查的请求特征
Azure App Service 健康检查的请求有以下特点:
- 直接发送到你的 App Service 默认域名(
appservicename.azurewebsites.net),而非自定义域名 - 默认使用 HTTP 协议发送请求,且不会自动跟随重定向(仅当返回 200-299 状态码时,才会标记实例健康)
- 请求的
User-Agent包含HealthCheck标识(例如AzureAppServiceHealthCheck/1.0)
问题根源
你的 web.config 规则会将默认域名的请求重定向到自定义域名,而健康检查不跟随重定向,导致无法获取到健康端点的 200 响应,因此标记实例不健康。同时,强制 HTTPS 规则也会对健康检查的 HTTP 请求触发重定向,进一步加剧问题。
解决方案:修改 web.config 规则
需要调整重写规则,让健康检查请求绕过重定向,直接访问到 server/api/healthcheck 端点。以下是修改后的完整规则:
<rule name="Force HTTPS"> <match url="(.*)" ignoreCase="false"/> <conditions logicalGrouping="MatchAll"> <add input="{HTTPS}" pattern="off"/> <add input="{HTTP_HOST}" pattern="^(.*)\.customdomain\.com$" /> <add input="{HTTP_USER_AGENT}" pattern="Initialization" negate="true"/> <!-- 新增:排除健康检查请求的HTTPS强制跳转 --> <add input="{HTTP_USER_AGENT}" pattern="HealthCheck" negate="true"/> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent"/> </rule> <rule name="Redirect requests to default azure websites domain" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll"> <add input="{HTTP_HOST}" pattern="^appservicename\.azurewebsites\.net$" /> <!-- 新增:健康检查请求不执行重定向 --> <add input="{HTTP_USER_AGENT}" pattern="HealthCheck" negate="true"/> </conditions> <action type="Rewrite" url="https://subdomain.customdomain.com/{R:0}" /> </rule> <!-- 新增:专门处理默认域名下的健康检查请求 --> <rule name="HealthCheck for Azure Domain" stopProcessing="true"> <match url="api/healthcheck" /> <conditions logicalGrouping="MatchAll"> <add input="{HTTP_HOST}" pattern="^appservicename\.azurewebsites\.net$" /> <add input="{HTTP_USER_AGENT}" pattern="HealthCheck" /> </conditions> <action type="Rewrite" url="server/api/healthcheck" /> </rule> <rule name="Server"> <match url="(.*)" /> <conditions logicalGrouping="MatchAny"> <add input="{HTTP_HOST}" pattern="subdomain.customdomain.com$" /> </conditions> <action type="Rewrite" url="server/{R:1}" /> </rule>
关键修改说明
- 强制 HTTPS 规则:新增排除健康检查请求的条件,避免对健康检查的 HTTP 请求触发重定向
- 默认域名重定向规则:新增排除健康检查请求的条件,让健康检查请求不被转发到自定义域名
- 新增健康检查专属规则:识别默认域名下的健康检查请求,直接路由到
server文件夹内的健康端点
修改完成后,重新部署 web.config,健康检查即可正常识别实例状态。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

