kestrel终结点由地址和协议组合定义,用于监听请求并路由至中间件;支持http/1.1、http/2、http/3;可通过url、appsettings.json或代码配置;默认绑定http://localhost:5000。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您在 Windows Server 2022 上部署 ASP.NET Core 应用,但发现外部请求无法正确到达 Kestrel 后端服务,则很可能是 IIS 反向代理链路未正确建立。以下是完成该配置的多种关键操作路径:
一、安装并启用 Application Request Routing (ARR)
ARR 是 IIS 实现反向代理功能所必需的核心模块,它提供请求路由、负载均衡和健康检查能力,缺失该模块将导致 URL 重写规则无法执行代理动作。
1、打开 Microsoft 官方下载中心页面,搜索 Application Request Routing 3.0 并下载适用于 Windows Server 2022 x64 的 .msi 安装包。
2、以管理员身份运行下载的 ARR 安装程序,在安装向导中勾选 IIS 代理功能 和 服务器场管理 组件。
3、安装完成后,在 IIS 管理器中展开服务器节点,确认已出现 Application Request Routing Cache 图标;右键点击该图标,选择“服务器代理设置”,勾选 启用代理 并保存。
二、配置 URL 重写规则实现请求转发
URL 重写模块(URL Rewrite)负责将进入 IIS 的 HTTP/HTTPS 请求按预设条件匹配并重定向至本地 Kestrel 实例,其规则必须与后端监听地址严格一致,否则触发 502 错误。
1、在 IIS 管理器中选中目标网站,双击打开 URL 重写 功能模块。
2、点击右侧“添加规则”,选择“空白规则”,填写以下内容:
名称:Proxy to Kestrel
匹配 URL 模式:.*
条件:{HTTP_HOST} 匹配 ^yourdomain\.com$(替换为实际域名)
操作类型:重写
重写 URL:http://127.0.0.1:5000/{R:0}(假设 Kestrel 监听 5000 端口)
3、勾选 附加查询字符串 和 停止处理后续规则,点击“应用”。
三、配置 ASP.NET Core 以正确识别转发头信息
Kestrel 默认不信任 X-Forwarded-* 头字段,若未显式启用前缀解析,将导致 HttpContext.Connection.RemoteIpAddress 返回 127.0.0.1、Request.Scheme 为 http 而非 https,影响身份验证与重定向逻辑。
1、在项目 Startup.cs 或 Program.cs 中定位 WebHostBuilder 或 WebApplicationBuilder 构建处。
2、添加 UseForwardedHeaders() 中间件,且必须置于 UseRouting() 之前。
3、在 ConfigureService 方法中注册转发头服务:
services.Configure
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
options.KnownProxies.Add(IPAddress.Parse("127.0.0.1"));
});
四、部署 Kestrel 应用并配置 Windows 服务托管
直接双击运行 dotnet MyApp.dll 仅适用于临时调试;生产环境需以 Windows 服务方式长期稳定运行,避免用户登出或会话终止导致进程退出。
1、使用 PowerShell(管理员权限)执行:
dotnet publish -c Release -o C:\inetpub\wwwroot\myapp
2、进入发布目录,创建服务安装脚本 install-service.ps1,内容包含:
New-Service -Name "MyAppCoreService" -BinaryPathName "C:\Windows\System32\cmd.exe /c cd C:\inetpub\wwwroot\myapp & dotnet MyApp.dll" -StartupType Automatic
3、执行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 后运行该脚本,并启动服务:
Start-Service MyAppCoreService
五、验证代理链路与 HTTPS 终止配置
IIS 必须正确终止 SSL 并将明文请求转发给 Kestrel,否则 Kestrel 将因接收 HTTPS 流量而拒绝响应,表现为连接重置或空响应。
1、在 IIS 管理器中选中网站,双击“SSL 设置”,勾选 要求 SSL 并启用客户端证书设置(如需)。
2、为网站绑定 HTTPS,指定有效证书;确保 Kestrel 的 launchSettings.json 中未启用 HttpsRedirection 或 Kestrel 配置了 https://localhost:5001 监听(应仅保留 http://localhost:5000)。
3、访问 https://yourdomain.com/api/test,使用 Fiddler 或浏览器开发者工具检查响应头:
确认存在 X-Forwarded-For 和 X-Forwarded-Proto: https,且状态码为 200。











