如何调整Kestrel的端口

ASP.NET Core 中调整 Kestrel 服务器的端口可以通过多种方式实现。以下是详细的配置方法:


1. 通过 appsettings.json 配置文件

这是最推荐的方式,支持不同环境(Development/Production)的差异化配置。

json 复制代码
{
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://localhost:5000"  // 默认HTTP端口
      },
      "Https": {
        "Url": "https://localhost:5001" // 默认HTTPS端口
      }
    }
  }
}

修改示例(将 HTTP 改为 8080,HTTPS 改为 8443):

json 复制代码
{
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://localhost:8080"
      },
      "Https": {
        "Url": "https://localhost:8443"
      }
    }
  }
}

2. 通过代码直接配置(Program.cs)

WebApplicationBuilder 构建阶段直接指定端口:

csharp 复制代码
var builder = WebApplication.CreateBuilder(args);

// 配置Kestrel端口
builder.WebHost.ConfigureKestrel(serverOptions =>
{
    serverOptions.ListenAnyIP(8080);    // 监听所有IP的8080端口(HTTP)
    serverOptions.ListenAnyIP(8443, listenOptions => 
    {
        listenOptions.UseHttps("certificate.pfx", "password"); // HTTPS配置
    });
});

var app = builder.Build();
app.Run();

3. 使用命令行参数

启动应用时通过命令行参数指定:

bash 复制代码
dotnet run --urls "http://localhost:8080;https://localhost:8443"

4. 环境变量配置

通过操作系统环境变量配置(适合容器化部署):

bash 复制代码
# Linux/macOS
export ASPNETCORE_URLS="http://localhost:8080;https://localhost:8443"

# Windows
set ASPNETCORE_URLS=http://localhost:8080;https://localhost:8443

5. 多端口监听配置

允许同时监听多个端口:

csharp 复制代码
builder.WebHost.ConfigureKestrel(serverOptions =>
{
    serverOptions.ListenAnyIP(8080);    // HTTP
    serverOptions.ListenAnyIP(8081);    // 第二个HTTP端口
    serverOptions.ListenAnyIP(8443, opts => opts.UseHttps()); // HTTPS
});

6. 动态端口绑定(随机端口)

让系统自动分配可用端口:

csharp 复制代码
builder.WebHost.UseUrls("http://*:0"); // 随机HTTP端口

通过代码获取实际分配的端口:

csharp 复制代码
var app = builder.Build();
app.Run();

// 获取实际端口(需在Run之后获取)
var port = app.Services.GetService<IServer>()
    .Features.Get<IServerAddressesFeature>()
    .Addresses.First().Split(':').Last();

7. 不同环境的差异化配置

appsettings.Development.jsonappsettings.Production.json 中分别定义:

开发环境(appsettings.Development.json)

json 复制代码
{
  "Kestrel": {
    "Endpoints": {
      "Http": { "Url": "http://localhost:5000" }
    }
  }
}

生产环境(appsettings.Production.json)

json 复制代码
{
  "Kestrel": {
    "Endpoints": {
      "Http": { "Url": "http://*:80" },
      "Https": { "Url": "https://*:443" }
    }
  }
}

验证配置是否生效

启动应用时观察控制台输出:

csharp 复制代码
Now listening on: http://localhost:8080
Now listening on: https://localhost:8443

总结

场景 推荐方式
开发环境快速修改 命令行参数或 launchSettings.json
生产环境固定端口 appsettings.json + 代码配置
容器化部署 环境变量配置
需要动态端口 代码绑定端口 0 + 获取实际端口

选择最适合你场景的方式,通常推荐使用 appsettings.json 进行集中化管理。

相关推荐
Piper蛋窝3 小时前
深入 Go 语言垃圾回收:从原理到内建类型 Slice、Map 的陷阱以及为何需要 strings.Builder
后端·go
六毛的毛5 小时前
Springboot开发常见注解一览
java·spring boot·后端
AntBlack5 小时前
拖了五个月 ,不当韭菜体验版算是正式发布了
前端·后端·python
31535669135 小时前
一个简单的脚本,让pdf开启夜间模式
前端·后端
uzong6 小时前
curl案例讲解
后端
一只叫煤球的猫6 小时前
真实事故复盘:Redis分布式锁居然失效了?公司十年老程序员踩的坑
java·redis·后端
大鸡腿同学7 小时前
身弱武修法:玄之又玄,奇妙之门
后端
轻语呢喃9 小时前
JavaScript :字符串模板——优雅编程的基石
前端·javascript·后端
MikeWe9 小时前
Paddle张量操作全解析:从基础创建到高级应用
后端
岫珩9 小时前
Ubuntu系统关闭防火墙的正确方式
后端