Kestrel監聽Port的設定方式

前言

.NET 會紅的一部份很大原因是因為終於實現了跨平台

而原先相依於 IIS 的 HttpServer 也因為跨平台而改採用較小的 Kestrel

也是可以託管給IIS: 詳細參考

而會寫這篇最大的原因還是因為,使用了微軟官方的 DockerImage 進行包裝後,發現都還是 Kestrel 都只會吃到 80 Port

而網路上爬了一些文,後來找到官方說明綁定的以下幾種方式

  1. No configuration
  • 預設為 http:localhost:5000 & https:localhost:5001
  1. 使用系統環境變數
  • 使用ASPNETCORE_URLS 來決定使用的Port

Docker 設定的預設為80,導致此次會發生此問題

  1. 使用參數來決定
  • 使用 dotnet XXX.dll --urls http://+:1234
  1. 寫死在程式碼中(不推薦)
webBuilder.UseKestrel((context, serverOptions) =>
{
    serverOptions.Configure(context.Configuration.GetSection("Kestrel"))
        .Endpoint("HTTPS", listenOptions =>
        {
            listenOptions.HttpsOptions.SslProtocols = SslProtocols.Tls12;
        });
});
  1. 透過 Appsetting.json 來設定(推薦)

設定完成後包起來就會發現已經吃到 Config 了