一、应用场景
现在随着.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