

指定 ASP.NET Core Kestrel 接聽 Port
source link: https://blog.darkthread.net/blog/set-kestrel-port/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

分享 ASP.NET Core 菜烏問題一枚。
使用 Visual Studio 或 dotnet 命令列工具編譯發佈 ASP.NET Core 專案後,執行 dotnet WebAsmName.dll 可啟動 Kestrel 執行網站,預設是聽 httq://localhost:5000 及 httqs://localhost:5001。延伸閱讀:ASP.NET Core 練功筆記 1、ASP.NET Core 練功筆記 2 – Ubuntu + SQLite + Dapper
有趣的是,當我以 microsoft/dotnet:2.1-aspnetcore-runtime Image 將同樣的 ASP.NET Core 網站包成 Docker 容器,設定檔沒動也沒設參數,網站卻會改掛在 80 Port。延伸閱讀:ASP.NET Core Docker 筆記 1 - 初探
就這麼知其然不知其所然混了好幾個月,是該花點時間把它搞清楚。
答案很簡單,依據官方文件,Kestrel 聽什麼 Port 可透過以下幾種方式控制:
- 不設定(No Configuration)
預設聽 httq://localhost:5000 及 httqs://localhost:5001 (前題是需先設好 SSL 憑證) - 使用 ASPNETCORE_URLS 環境參數
在 Docker 裡自動改聽 80 Port 的謎底解開了 - 在 Docker 容器中 ASPNETCORE_URLS 環境變數被設成 http://+:80 - dotnet Web.dll 時加上 --urls 參數
例如以下範例: - 透過 appSettings.json 指定
加入 Kestrel / EndPoints / Http / Url 指定,範例如下:{ "Logging": { "LogLevel": { "Default": "Warning" } }, "Kestrel": { "EndPoints": { "Http": { "Url": "http://localhost:5123" } } } }
- 呼叫 UseUrls() 擴充方法
UseUrls() 可傳入一或多個端點 URL 指定 Kestrel 網站要聽的 Port,但將設定寫死在程式碼不是好主意,略過。public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseUrls("http://localhost:5123");
實務上讓 Kestrel 直接對外提供服務的機會不多,中間多會搭配 IIS、Nginx 等 Reverse Proxy。即使是無 Docker 環境,我們也只需有能力指定錯開 TCP Port 避免打架就夠了。至於要掛載多個 Port、依 Host Header 導向不同網站、設定 SSL 憑證,交給 Nginx、Certbot 才是王道。官方文件還有很多關於 Kestrel 進階設定的介紹,等到要用時再查。
Recommend
-
98
ASP.NET MVC 中的过滤器(Filter)是 AOP(面向切面编程) 思想的一种实现,供我们在执行管道的特定阶段执行代码,通过使用过滤器可以实现 短路请求、缓存请求结果、日志统一记录、参数合法性验证、异常统一处理、返回值格式化 等等,同时...
-
107
连发了几篇ASP.NETCore文章,果不其然接到各方询问:「喵的妈呀,微软又推新东西了?」「WebForm玩完了吗?」「我ASP.NETMVC还没开始玩耶,是不是不用学了?」先简单答复以上疑问:是的,ASP.NETCore 是下一代的ASP.NET,能跨平台执行,预期是
-
60
NHibernate has been my favorite ORM for long time. Although it’s more complex for beginners than Entity Framework it’s more matured and many developers consider it to be practially an industry standard. NHibernate works w...
-
66
JWT (JSON Web Token)是一种开放标准,它以 JSON 对象的方式在各方之间安全地传输信息。通俗的说,就是通过数字签名算法生产一个字符串,然后在网络请求的中被携带到服务端进行身份认证,功能上来说和 S...
-
60
最近沉寂了一段,主要是上半年相当于休息和调整了一段时间,接下来我将开始陆续学习一些新的技术,比如Docker、Jenkins等,都会以生活实例从零开始讲解起,到时一并和大家分享和交流。接下来几节课的内容将会讲解JWT,关于JWT的原理解析等等...
-
33
0.前言 通过前面几篇,我们了解到了如何实现项目的基本架构:数据源、路由设置、加密以及身份验证。那么在实现的时候,我们还会遇到这样的一个问题:当我们业务类和数据源越来越多的时候,我们无法通过普通的构造对象的方法为...
-
35
官方建议用app.UseExceptionHandler("/error")来集中处理异常,本例是一个具体的应用。 比如项目中有一个ViewModel,要求Name最大长度为5 /// <summary>
-
8
指定 ASP.NET Core 应用监听的端口 ASP.NET Core 应用默认监听的端口是 5000 , 在调试或者部署的过程中经常需要指定监听的端口来来运行, 本文就这个问题, 进行一个总结, 可以通过下面的方法来指定运行端口。 使用命令行参数
-
16
Starting from version 2.2, ASP.NET Core allow you to use the InProcess mode to improve performance under IIS. Rick Strahl has a detailed a...
-
11
0:00 / 1:35:52 ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK