标签:UseUrls 绑定 http 自定义 args 端口 端口号 Listen
一、应用场景
现在随着.Net Core的发展,Asp.Net的网站也可以开始跨平台发布了,.Net Core网站有两种形式,一种就是传统Windows自带的IIS服务器发布,还有一种就是在Linux这种没有操作界面的暗黑系统上发布。
IIS发布时端口是可以在可视化界面上配置的,而linux发布的时候,启动网站是系统会给一个默认的http-5000端口和一个https-5001端口,这时候往往会出问题,可能我们并没有配置https协议,导致我们的网站不可访问。或者我们并不想使用默认的5000端口,我们希望设置成8080或者8088,那应该怎么设置呢。这里介绍两种方法:
二、在程序中使用UseKestrel来配置
我们创建一个Web项目时,系统会自动给我们生成一个Program入口文件,如下
这里就是我们要配置端口的地方,这个Program文件如下
- using Microsoft.AspNetCore;
- using Microsoft.AspNetCore.Hosting;
- namespace ttttt
- {
- public class Program
- {
- public static void Main(string[] args)
- {
- CreateWebHostBuilder(args).Build().Run();
- }
- public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
- WebHost.CreateDefaultBuilder(args)
- //.UseKestrel(o =>
- //{
- // o.Listen(IPAddress.Loopback, 5080); //HTTP port
- // //o.Listen(IPAddress.Loopback, 5443); //HTTPS port
- //})
- .UseStartup<Startup>();
- }
- }
需要配置的地方其实就是程序中被我注释掉的地方,如下
- .UseKestrel(o =>
- {
- o.Listen(IPAddress.Loopback, 5080); //HTTP port
- //o.Listen(IPAddress.Loopback, 5443); //HTTPS port
- })
这段代码里可以看到有两个o.Listen(),o.Listen(IPAddress.Loopback, 5004) 就是进行绑定,其中第一个参数是IPAddress类型。
在文档中介绍,如果你只配置一个o.Listen(),那么系统会认为你配置的是Http端口,如果你配置了两个o.Listen(),则系统会自动把第二个o.Listen()识别成Https的端口。
这样在程序启动时,就可以使用你指定的端口了。
三、程序中使用UseUrls配置
上述方法可行,但是代码中可读性不好,因此我们可以使用一种可读性更好的配置方法:
- using Microsoft.AspNetCore;
- using Microsoft.AspNetCore.Hosting;
- namespace entConsole
- {
- public class Program
- {
- public static void Main(string[] args)
- {
- CreateWebHostBuilder(args).Build().Run();
- }
- public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
- WebHost.CreateDefaultBuilder(args)
- .UseUrls("http://*:5000;https://*:5001")
- //.UseUrls("http://localhost:5002;http://localhost:5003")
- .UseStartup<Startup>();
- }
- }
这种方法是不是一看就懂,http://*:5000中'*' 代表0.0.0.0,允许本机、局域网、公网访问,'*'不是特殊字符,任何不能识别成ip的字符都将会绑定到0.0.0.0。
你可以写成这种形式
UseUrls("http://*:5000;https://*:5001")
也可以写成
UseUrls("http://*:5000")
或者这样也可以
UseUrls("http://localhost:5002")
四、启动程序时手动指定绑定的端口
作者不喜欢在程序中写死这个配置,因为每次部署的时候改程序是件很有风险和很容易背锅的事情。当然也可以把端口写在配置文件中,用上述两种方法去读取配置文件。但是部署生产的时候修改配置文件同样是有风险的。
我们知道.net core可以使用dotnet 命令方式去运行 .net core 应用,这种方式使我们的web不再依赖于iis,实现了跨平台。
我们先了解下命令:
> dotnet run [options] [[--] arguments]
dotnet run 命令会把我们的项目编译后直接运行,在开发的时候使用,如果是编译好的项目,则使用:
> dotnet yourproject.dll [[--] arguments]
作者喜欢在启动程序时手动指定绑定的端口,只要使用参数--urls="http://*:5005",
方法如下:
> dotnet test.dll --urls http://*:5005
是不是也很简单,正常启动程序时,指令时dotnet test.dll,我们只要在后面加上要绑定的端口就好了。效果如下:
看到Now listening on: http://[::]:5005,说明我们已经成功绑定了5005端口
五、补充
那每次启动都要来这样手动输入一次是不是太麻烦了?其实也是有解决办法的,作者常用的是利用supervisor作为守护进程,把启动指令写进supervisor配置文件中就好了,这样就算网站因为意外问题被关掉,supervisor依然可以使用设定好的启动命令将网站拉起来。
supervisor使用方法可以看另一篇文章:Linux服务器部署.Net Core + Nginx + Supervisor 项目过程详解
如果你还想再搞一搞端口转发,或者负载均衡,可以参看:Linux下如何配置Nginx负载均衡(避坑指南)
到这里,对于Linux发布网站时,如何制定网站端口的方法你就已经学会了,基本上可以解决99%以上的网站端口绑定问题。
转 https://www.cnblogs.com/weihengblogs/p/13724360.html
标签:UseUrls,绑定,http,自定义,args,端口,端口号,Listen 来源: https://www.cnblogs.com/wl-blog/p/15789625.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。