You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET gRPC部署至Azure Linux App Service遇RST_STREAM错误求助

排查Azure Linux App Service上.NET 7 gRPC部署失败问题

核心问题分析

你遇到的Received RST_STREAM with code 0错误,通常和HTTP/2配置不匹配、端口监听逻辑错误或者转发头部处理缺失有关,结合Azure Linux App Service的运行环境,以下是针对性的排查和修复方案:

1. 修正Kestrel端口监听配置

Azure Linux App Service会通过**PORT环境变量**指定应用需要监听的端口,硬编码8080/5253会导致应用无法正确响应前端转发的请求。修改RELEASE模式下的Kestrel配置:

#if RELEASE
builder.WebHost.ConfigureKestrel(options =>
{
    var port = int.Parse(Environment.GetEnvironmentVariable("PORT") ?? "8080");
    options.ListenAnyIP(port, listenOptions =>
    {
        listenOptions.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http1AndHttp2;
    });
});
#endif
  • 不再单独监听5253端口,Azure App Service前端会将所有请求(包括HTTP/2)转发到指定的PORT端口
  • 启用Http1AndHttp2,同时兼容健康检查的HTTP/1请求和gRPC的HTTP/2请求

2. 启用Azure App Service的HTTP/2支持

在Azure门户中配置你的应用服务:

  • 进入应用服务的配置 > 常规设置
  • 将HTTP版本设置为2.0
  • 保存配置并重启应用

3. 配置转发头部处理

Azure App Service前端会处理TLS和请求转发,需要让Kestrel信任这些转发的头部,否则gRPC无法识别正确的协议和主机信息:
在builder.Services.AddGrpc()之前添加:

builder.Services.Configure<Microsoft.AspNetCore.HttpOverrides.ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor | Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto;
    options.KnownNetworks.Clear();
    options.KnownProxies.Clear();
});

然后在app.Run()之前添加:

app.UseForwardedHeaders();

4. 验证Postman请求配置

确保Postman的gRPC请求配置正确:

  • 选择gRPC请求类型,填入完整的HTTPS地址(Azure App Service默认提供HTTPS访问)
  • 关闭Postman的Disable SSL verification选项(如果开启)
  • 确认请求的proto文件、服务方法与后端定义完全匹配

5. 通过Azure日志定位细节

通过Azure门户查看应用实时日志:

  • 进入监测 > 日志流,查看应用启动日志、错误输出
  • 检查是否存在Kestrel启动失败、端口绑定冲突等关键报错信息

内容的提问来源于stack exchange,提问作者JoacimWall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:10:32