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

Windows Server 2016下Kestrel托管gRPC服务及IIS反向代理配置方法

Windows Server 2016 部署 gRPC 服务(Kestrel + IIS 反向代理方案)

一、Kestrel 侧核心配置(规避端口冲突)

Windows Server 2016 不支持 IIS 直接托管 gRPC,但 Kestrel 原生支持 HTTP/2,可独立部署。关键是限制 Kestrel 仅监听本地回环地址的指定端口,避免与现有 IIS 站点冲突:

1. 代码层面配置(Program.cs)

var builder = WebApplication.CreateBuilder(args);

// 注册gRPC服务
builder.Services.AddGrpc();

// 配置Kestrel监听localhost指定端口,强制启用HTTP/2
builder.WebHost.ConfigureKestrel(options =>
{
    options.ListenLocalhost(5001, listenOptions =>
    {
        listenOptions.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http2;
    });
});

var app = builder.Build();

// 映射自定义gRPC服务
app.MapGrpcService<YourGrpcServiceImpl>();

app.Run();

2. 配置文件层面(appsettings.json)

若需更灵活的配置,可通过配置文件指定端点:

{
  "Kestrel": {
    "Endpoints": {
      "GrpcLocal": {
        "Url": "https://localhost:5001",
        "Protocols": "Http2"
      }
    }
  }
}

注:Kestrel 侧可暂时使用自签证书,后续通过 IIS 反向代理复用正式 SSL 证书,无需在 Kestrel 配置正式证书。

二、IIS 反向代理 + 复用 SSL 证书实现步骤

利用 IIS 做反向代理,既能复用已有的自动续期 SSL 证书,又能对外提供标准 443 端口访问,同时隔离 Kestrel 服务:

1. 安装必要 IIS 模块

  • 安装 Application Request Routing (ARR) 和 URL Rewrite 模块(可通过 IIS 管理器的「Web 平台安装程序」搜索安装)。
  • 启用 ARR 代理:打开 IIS 管理器 → 服务器节点 →「Application Request Routing Cache」→ 右侧「Server Proxy Settings」→ 勾选「Enable proxy」并保存。

2. 配置 IIS 站点

  • 使用现有站点或新建站点,绑定已配置自动续期的 SSL 证书。
  • 禁用站点的静态内容等无关功能,仅保留反向代理作用。

3. 创建 URL 重写规则

在 IIS 站点的「URL Rewrite」模块中添加反向代理规则:

  1. 点击「Add Rule(s)」→ 选择「Reverse Proxy」。
  2. 在目标服务器地址栏输入 http://localhost:5001(对应 Kestrel 监听端口)。
  3. 勾选「Enable SSL offloading」(将 SSL 解密放在 IIS 侧,Kestrel 无需处理 SSL)。
  4. 生成规则后,编辑规则的「Server Variables」,添加两个变量:
    • HTTP_X_FORWARDED_PROTO,值设为 https
    • HTTP_X_FORWARDED_FOR,值设为 {REMOTE_ADDR}
  5. 调整规则的「Conditions」,添加条件:{REQUEST_URI} 匹配 ^/your-grpc-service-path/.*(替换为你的 gRPC 服务路径,比如默认的 /grpc.health.v1.Health/),确保仅 gRPC 请求被转发。

4. 优化 IIS 应用池设置

  • 将应用池的 .NET CLR 版本设为「无托管代码」(站点仅做反向代理,无需 .NET 运行时)。
  • 确保应用池权限足够访问本地 Kestrel 服务(默认权限即可)。

三、生产环境实践经验

  1. 服务托管:将 gRPC 服务注册为 Windows 服务,避免依赖控制台窗口。可使用 sc create 命令或 NSSM 工具(Non-Sucking Service Manager)创建服务,设置启动类型为「自动」。
  2. 日志与监控:配置 Kestrel 日志输出到本地文件(如用 Serilog),通过 Windows 性能计数器监控 CPU、内存占用;IIS 侧启用请求日志,便于排查反向代理问题。
  3. SSL 续期:若使用自动续期证书(如 Let's Encrypt 的 Win-acme 工具),续期后 IIS 会自动加载新证书,无需重启反向代理站点或 Kestrel 服务。
  4. 端口安全:Kestrel 仅监听 localhost,无需在 Windows 防火墙开放 5001 端口;仅需开放 IIS 站点绑定的 443 端口对外访问。
  5. 性能优化:在 ARR 设置中禁用「Response Buffering」(gRPC 为流式传输,缓冲会导致延迟或错误);调整 IIS 应用池的队列长度和进程数,适配并发请求量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:42:55