一、應用場景
現在隨着.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