Net Core -- 配置Kestrel端口
Net Core -- 配置Kestrel端口
Kestrel介绍
在Asp.Net Core中,我们的web application 其实是运行在Kestrel服务上,它是一个基于libuv开源的跨平台可运行 Asp.Net Core 的web服务器。
在开发阶段,我们可以直接使用Kestrel服务器用来测试,也可以使用IISExpress。在使用IISExpress其实也需要启动一个Kestrel服务器,通过IISExpress反向代理请求到Kestrel,很多时候我更喜欢使用Kestrel,因为可以实时看到log。
配置端口
在Socket开发中,服务器都会绑定到某个ip某个端口进行监听,等待客户端的连接,然后交换数据,Kestrel同样需要对某个端口进行监听,客户端会请求这个端口然后建立连接进行数据交换。我们说的配置url或者配置端口,其实本质上都是建立对某个端口的监听。
配置规则
我们知道在Kestrel通过绑定Urls参数实现绑定ip和端口,.Net Core允许我们使用多种方式来实现绑定url,我们先了解下绑定的规则:
[http|https]://[ip|localhost|hostname]:port
- localhost 或127.0.0.1 代表本机ip,仅允许本机访问
- 局域网ip,允许局域网内客户端访问
- 端口0代表随机绑定可用端口
- '*' 代表0.0.0.0,允许本机、局域网、公网访问
'*'不是特殊字符,任何不能识别成ip的字符都将会绑定到0.0.0.0,so,你看到的hostname:ip 其实并没有真正的绑定到hostname,Kestrel不会识别hostname,所以不允许像iis那样,多个application通过hostname绑定到同一个ip的同一个端口上,所以你需要通过反向代理服务器来实现
通过上述的绑定字符串,Kestrel会解析成相应的ip和端口,然后进行绑定监听。
配置方式
.Net Core提供了多种对Kestrel端口的配置方式,我们可以通过编码、配置文件、命令行参数进行配置,非常便利,接下来我们来看下各种配置方式。
无论那种方式,我们都必须在Kestrel启动之前进行,一般情况我们都在Program.cs中进行。
编码方式
编码方式有2种方式:
1、通过UseKestrel(Action):
var host = WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel(o =>
{
o.Listen(IPAddress.Loopback, 5001);
})
.Build();
host.Run();
o.Listen(IPAddress.Loopback, 5004) 就是进行绑定,其中第一个参数是IPAddress类型。这种方式不是很便利,阅读性也不好,推荐使用第二种
2、通过UseUrls方式:
var host = WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseUrls("http://localhost:5002;http://localhost:5003")
.Build();
host.Run();
这种方式相对简单,而且不容易出错,但灵活性不强。
通过配置文件
我们可以通过Json文件对Kestrel进行配置,包括我们的url。
1、首先我们需要创建一个json文件,这里以host.json为例:
{
"urls": "http://*:5004;"
}
2、我们需要在build host的时候告诉Kestrel读取config文件,代码如下:
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("host.json", optional: true)
.Build();
var host = WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseConfiguration(config)
.Build();
host.Run();
}
这种方式相比编码来说较便利,但如果在web运行在容器内的话,修改还是有点麻烦,下面来看下命令行格式。
命令行方式
我们知道.net core我们可以使用dotnet 命令方式去运行 .net core 应用,这种方式使我们的web不再依赖于iis,实现了跨平台。
我们先了解下命令:
> dotnet run [options] [[--] arguments]
dotnet run 命令会把我们的项目编译后直接运行,在开发的时候使用,如果是编译好的项目,则使用:
> dotnet yourproject.dll [[--] arguments]
如果我们需要配置Urls的话,则只要使用参数--urls="http://*:5005",例如:
> dotnet run --urls="http://*:5005"
如果这时候你如此运行,你会发现你的项目并未监听5005端口,因为你还没有对Kestrel进行配置,告诉其读取命令行参数,我们需要在Build host的时候进行如下配置:
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddCommandLine(args) //添加对命令参数的支持
.Build();
var host = WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
host.Run();
}
ok,这时候再运行dotnet run命令吧!
关于url配置的问题
Q:url配置支持多域名吗?
A:上面说过,kestrel是不支持主机名解析的,你进行的配置都会绑定到0.0.0.0
Q:url配置支持多个ip吗?
A:支持,但必须是本机所属ip,否则运行则出错
Q:多个Kestrel能监听一个端口吗?
A:不能
Q:我能通过多种方式进行url配置吗?
A:可以,但最终生效的只有一种,也就是最后配置的方式,没有优先级
Q:Kestrel支持https吗?
A:支持
Q:为什么其他教程中是使用servers.urls呢?
A:我看了下,可能是扩展类的不同吧,目前来说已经改成urls了,而且不需要再额外引用其他类库了
代更。。。。。。
写在最后
最近在看微服务和asp.net core的东西,也希望把一些小知识分享给大家。
最后推荐我的.Net Core QQ学习群:376248054(通关密码:cnblogs),最近群里不是很活跃,大家进来多发言发言哈~
Net Core -- 配置Kestrel端口的更多相关文章
- Do you kown Asp.Net Core -- 配置Kestrel端口
Kestrel介绍 在Asp.Net Core中,我们的web application 其实是运行在Kestrel服务上,它是一个基于libuv开源的跨平台可运行 Asp.Net Core 的web服 ...
- ASP.NET Core配置Kestrel 网址Urls
ASP.NET Core中如何配置Kestrel Urls呢,大家可能都知道使用UseUrls() 方法来配置. 今天给介绍全面的ASP.NET Core 配置 Urls,使用多种方式配置Urls.让 ...
- ASP.NET Core开发-如何配置Kestrel 网址Urls
ASP.NET Core中如何配置Kestrel Urls呢,大家可能都知道使用UseUrls() 方法来配置. 今天给介绍全面的ASP.NET Core 配置 Urls,使用多种方式配置Urls. ...
- ASP.NET Core的Kestrel服务器
原文地址----Kestrel server for ASP.NET Core By Tom Dykstra, Chris Ross, and Stephen Halter Kestrel是一个基于l ...
- net core体系-web应用程序-4net core2.0大白话带你入门-4asp.net core配置项目访问地址
asp.net core配置访问地址 .net core web程序,默认使用kestrel作为web服务器. 配置Kestrel Urls有四种方式,我这里只介绍一种.其它方式可自行百度. 在Pr ...
- [转帖]ASP.NET Core的Kestrel服务器
ASP.NET Core的Kestrel服务器 https://cloud.tencent.com/developer/article/1023247 在这篇文章中: 何时使用Kestrel和反向代理 ...
- ASP.NET Core的Kestrel服务器(转载)
Kestrel是一个基于libuv的跨平台ASP.NET Core web服务器,libuv是一个跨平台的异步I/O库.ASP.NET Core模板项目使用Kestrel作为默认的web服务器.Kes ...
- 配置Kestrel 网址Urls
配置Kestrel 网址Urls ASP.NET Core中如何配置Kestrel Urls呢,大家可能都知道使用UseUrls() 方法来配置. 今天给介绍全面的ASP.NET Core 配置 Ur ...
- asp.net core配置访问地址
配置Kestrel Urls有四种方式,我这里只介绍一种.其它方式可自行百度. 在Program.cs里使用UseUrls()扩展方法进行设置.UseUrls()方法的参数是个字符串数组,可以同时设置 ...
随机推荐
- 存储过程IF --ELSE IF -- END IF 使用
CREATE OR REPLACE PROCEDURE BJPJYXK_HF_SD( sqid_p IN VARCHAR2,--申请单ID xkbh_p IN VARCHAR2,--新生成的许可证编号 ...
- CF Round #460
晚上去看月亮了 离比赛结束半个小时才滚回来A了T1T2T3... 又要掉Rating辣 T4 给一个有向图 每条边有一个英文字母作为边权 求一条路径 该路径上权值众数出现次数最多 求最多的出现次数 拓 ...
- 数据结构与算法(2)----->字符串
1. 字符串的一些特点 1.1 广泛性 (1)字符串可以看作是字符类型的数组----->所以可能会涉及排序+查找; (2)很多问题都可以转化为字符串类型的方法去解决; 需要注意的是:用java ...
- BZOJ2028:[SHOI2009]会场预约(平衡树版)
浅谈\(splay\):https://www.cnblogs.com/AKMer/p/9979592.html 浅谈\(fhq\)_\(treap\):https://www.cnblogs.com ...
- 洛谷 2577 [ZJOI2005]午餐——序列dp
题目:https://www.luogu.org/problemnew/show/P2577 可以从只有一个窗口的角度思考出一个贪心结论.就是应当按吃饭时间(不算打饭时间)从大到小排序.这样交换相邻两 ...
- AI-Info-Micron-Insight:高速数据:第四次工业革命的助推引擎
ylbtech-AI-Info-Micron-Insight:高速数据:第四次工业革命的助推引擎 1.返回顶部 1. 高速数据:第四次工业革命的助推引擎 第四次工业革命已然来临,因为数字技术几乎连接了 ...
- DCloud-HTML5+:5+ App开发入门指南
ylbtech-DCloud-HTML5+:5+ App开发入门指南 1.返回顶部 1. 5+ App开发入门指南 App App入门 HTML5 Plus应用概述 HTML5 Plus移动App,简 ...
- Scala Beginner
开始学习Scala,下面的内容大部分从Scala官网翻译过来,有几个地方翻译的不是很好,表述不清楚的地方大家可以浏览Scala官网,多指教. Scala offical website is http ...
- DDD领域事件与事件总线源码下载
最近在看领域事件的文章.看到了“张占岭”的<DDD~领域事件与事件总线> 原文地址:http://www.cnblogs.com/lori/p/3476703.html 遗憾的是没有提供下 ...
- jmeter设置默认为中文
1.编辑jmeter目录/bin/jmeter.porperties文件 2.点击将language的注释去掉,并将值变为zh_CN保存.