Linux部署Net Core網站,三種自定義綁定端口號的方法(UseUrls,UseKestrel,手動指定)


一、應用場景

現在隨着.Net Core的發展,Asp.Net的網站也可以開始跨平台發布了,.Net Core網站有兩種形式,一種就是傳統Windows自帶的IIS服務器發布,還有一種就是在Linux這種沒有操作界面的暗黑系統上發布。

IIS發布時端口是可以在可視化界面上配置的,而linux發布的時候,啟動網站是系統會給一個默認的http-5000端口和一個https-5001端口,這時候往往會出問題,可能我們並沒有配置https協議,導致我們的網站不可訪問。或者我們並不想使用默認的5000端口,我們希望設置成8080或者8088,那應該怎么設置呢。這里介紹兩種方法:

二、在程序中使用UseKestrel來配置

我們創建一個Web項目時,系統會自動給我們生成一個Program入口文件,如下

這里就是我們要配置端口的地方,這個Program文件如下

  1.  
    using Microsoft.AspNetCore;
  2.  
    using Microsoft.AspNetCore.Hosting;
  3.  
     
  4.  
    namespace ttttt
  5.  
    {
  6.  
    public class Program
  7.  
    {
  8.  
    public static void Main(string[] args)
  9.  
    {
  10.  
    CreateWebHostBuilder(args).Build().Run();
  11.  
    }
  12.  
     
  13.  
    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
  14.  
    WebHost.CreateDefaultBuilder(args)
  15.  
    //.UseKestrel(o =>
  16.  
    //{
  17.  
    // o.Listen(IPAddress.Loopback, 5080); //HTTP port
  18.  
    // //o.Listen(IPAddress.Loopback, 5443); //HTTPS port
  19.  
    //})
  20.  
    .UseStartup<Startup>();
  21.  
    }
  22.  
    }

需要配置的地方其實就是程序中被我注釋掉的地方,如下

  1.  
    .UseKestrel(o =>
  2.  
    {
  3.  
    o.Listen(IPAddress.Loopback,  5080); //HTTP port
  4.  
    //o.Listen(IPAddress.Loopback, 5443); //HTTPS port
  5.  
    })

這段代碼里可以看到有兩個o.Listen(),o.Listen(IPAddress.Loopback, 5004) 就是進行綁定,其中第一個參數是IPAddress類型。

在文檔中介紹,如果你只配置一個o.Listen(),那么系統會認為你配置的是Http端口,如果你配置了兩個o.Listen(),則系統會自動把第二個o.Listen()識別成Https的端口。

這樣在程序啟動時,就可以使用你指定的端口了。

三、程序中使用UseUrls配置

上述方法可行,但是代碼中可讀性不好,因此我們可以使用一種可讀性更好的配置方法:

  1.  
    using Microsoft.AspNetCore;
  2.  
    using Microsoft.AspNetCore.Hosting;
  3.  
     
  4.  
    namespace entConsole
  5.  
    {
  6.  
    public class Program
  7.  
    {
  8.  
    public static void Main(string[] args)
  9.  
    {
  10.  
    CreateWebHostBuilder(args).Build().Run();
  11.  
    }
  12.  
     
  13.  
    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
  14.  
    WebHost.CreateDefaultBuilder(args)
  15.  
    .UseUrls( "http://*:5000;https://*:5001")
  16.  
    //.UseUrls("http://localhost:5002;http://localhost:5003")
  17.  
    .UseStartup<Startup>();
  18.  
    }
  19.  
    }

這種方法是不是一看就懂,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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM