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

如何在Windows Server 2019上用Windows服务托管多环境ASP.NET Core 6 API

同一域名多路径转发到多环境Windows服务API的实现方案

推荐方案:IIS ARR + URL Rewrite(最贴近IIS转发逻辑)

Windows Server 2019上可利用IIS的应用程序请求路由(ARR)和URL重写模块实现反向代理,完全匹配你需要的路径转发逻辑:

  1. 安装必要组件

    • 打开服务器管理器,添加「Web服务器(IIS)」角色,勾选「应用程序请求路由(ARR)」和「URL重写」模块完成安装。
  2. 配置反向代理网站

    • 在IIS管理器中创建一个空网站,绑定到目标域名的HTTPS端口,使用你已有的本地证书。
    • 给该网站添加URL重写规则:
      • 匹配模式:^/(dev|test|prod)/(.*)(根据实际环境名称调整正则)
      • 操作类型选择「反向代理」
      • 重写URL填写:http://localhost:{对应环境端口}/{R:2}(比如dev环境服务监听5001端口,就填http://localhost:5001/{R:2})
      • 进入IIS服务器节点的「ARR代理设置」,勾选「启用代理」确保功能生效。
  3. 配置各环境API服务的Kestrel

    • 每个环境的API服务(Windows服务)需监听不同的本地HTTP端口,在appsettings.{env}.json中配置:
      "Kestrel": {
        "Endpoints": {
          "Http": {
            "Url": "http://localhost:5001"
          }
        }
      }
      

    (HTTPS由IIS代理层处理,内部服务用HTTP即可,避免重复配置证书)

备选方案:YARP反向代理(轻量ASP.NET Core原生方案)

如果不想依赖IIS,可使用ASP.NET Core官方的YARP代理库搭建轻量转发服务,同样托管为Windows服务:

  1. 创建代理项目

    • 新建ASP.NET Core空项目,安装NuGet包Microsoft.AspNetCore.Yarp.ReverseProxy。
  2. 配置路由规则

    • 在appsettings.json中添加YARP的路由和集群配置,示例:
      "ReverseProxy": {
        "Routes": {
          "dev_route": {
            "ClusterId": "dev_cluster",
            "Match": { "Path": "/dev/{**catch-all}" },
            "Transforms": [{ "PathRemovePrefix": "/dev" }]
          },
          "test_route": {
            "ClusterId": "test_cluster",
            "Match": { "Path": "/test/{**catch-all}" },
            "Transforms": [{ "PathRemovePrefix": "/test" }]
          }
        },
        "Clusters": {
          "dev_cluster": {
            "Destinations": { "dev_node": { "Address": "http://localhost:5001" } }
          },
          "test_cluster": {
            "Destinations": { "test_node": { "Address": "http://localhost:5002" } }
          }
        }
      }
      
  3. 启动代理服务

    • 在Program.cs中配置YARP:
      var builder = WebApplication.CreateBuilder(args);
      builder.Services.AddReverseProxy().LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
      var app = builder.Build();
      app.MapReverseProxy();
      app.Run("https://{server name}:443"); // 绑定到目标域名的HTTPS端口,使用已有证书
      
    • 将该代理项目发布为Windows服务,和各环境API服务一同运行。

注意事项

  • 所有Windows服务的监听端口必须唯一,避免端口冲突。
  • 仅在反向代理层配置HTTPS证书,内部API服务用HTTP通信,简化证书管理。
  • 测试时验证路径转发是否正确:比如访问https://{server name}/dev/api/values应转发到http://localhost:5001/api/values。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:22:07