ASP.NET Core的Kestrel伺服器

来源:http://www.cnblogs.com/Wddpct/archive/2016/12/01/6123653.html
-Advertisement-
Play Games

"原文地址 Kestrel server for ASP.NET Core" By [Tom Dykstra][1], [Chris Ross][2], and [Stephen Halter][3] Kestrel是一個基於libuv的跨平臺[ASP.NET Core web伺服器][4],[li ...


原文地址----Kestrel server for ASP.NET Core

By Tom Dykstra, Chris Ross, and Stephen Halter

Kestrel是一個基於libuv的跨平臺ASP.NET Core web伺服器libuv是一個跨平臺的非同步I/O庫。ASP.NET Core模板項目使用Kestrel作為預設的web伺服器。

Kestrel支持以下功能:

  • HTTPS
  • 用於啟用不透明升級的WebSockets
  • 位於Nginx之後的高性能Unix sockets

Kestrel 被.NET Core支持的所有平臺和版本所支持

查看或下載示例代碼

何時使用Kestrel和反向代理伺服器

如果你的應用只接收來自內部網路的請求,你可以只使用Kestrel本身。

如果你將你的應用部署在公共網路上,我們建議你使用IIS,Nginx或者Apache作為反向代理伺服器。一個反向代理伺服器接收來自網路的HTTP請求並且在經過一些初步處理後將請求傳遞到Kestrel伺服器。

出於安全性的理由,反向代理常常被edge deployments所採用。因為Kestrel相對較新,對抵禦安全攻擊至今還沒有一個完整的功能補充。安全性處理包括但不限於適當的超時,大小的限制,以及併發連接限制等問題。

另一個需要反向代理的場景是,你有多個需要在單獨的伺服器上運行並分享同一埠的應用。因為Kestrel不支持在多進程間分享同一埠,所以應用並不能直接和Kestrel合作。當你在某個埠上配置Kestrel運行偵聽時,不算主機頭如何標識,Kestrel會為該埠處理所有的流量。反向代理可以為多個應用共用唯一埠並將流量發送給Kestrel。

即使不需要反向代理伺服器,使用它也可以簡化負載均衡和SSL設置 -- 只要你的反向代理伺服器需要SSL證書,並且該伺服器可以和你的應用在內部網中通過普通HTTP進行通信。

如何在ASP.NET Core應用中使用Kestrel

安裝 Microsoft.AspNetCore.Server.Kestrel Nuget包。

在應用的Main方法中調用WebHostBuilderUseKestrel 擴展方法,指定你需要的Kestrel選項,如以下示例所示:

public static int Main(string[] args)
{
    Console.WriteLine("Running demo with Kestrel.");

    var config = new ConfigurationBuilder()
        .AddCommandLine(args)
        .Build();

    var builder = new WebHostBuilder()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseConfiguration(config)
        .UseStartup<Startup>()
        .UseKestrel(options =>
        {
            if (config["threadCount"] != null)
            {
                options.ThreadCount = int.Parse(config["threadCount"]);
            }
        })
        .UseUrls("http://localhost:5000");

    var host = builder.Build();
    host.Run();

    return 0;
}

URL 首碼

預設情況下,ASP.NET Core項目綁定了http://localhost:5000。通過使用UseUrls擴展方法——編輯urls命令行參數,或者是通過ASP.NET Core配置系統,你可以為Ketrel配置URL首碼和埠號以用來偵聽請求。關於這些方法更多的信息,請參考Hosting。有關於當你使用IIS作為反向代理時,URL綁定是如何工作的信息,請參考ASP.NET Core 模塊

Kestrel URL首碼可以是以下格式中的任一種。

  • IPv4 地址和埠號
http://65.55.39.10:80/
https://65.55.39.10:443/
  • IPv6 地址和埠號
http://[0:0:0:0:0:ffff:4137:270a]:80/ 
https://[0:0:0:0:0:ffff:4137:270a]:443/

IPv6中的 [::] 等價於 IPv4 0.0.0.0。

  • 主機名和埠號
http://contoso.com:80/
http://*:80/
https://contoso.com:443/
https://*:443/

主機名稱,*,以及+,都不是特殊的。任何沒有公認的IP 或是“localhost”的地址將綁定到所有的IPv4和IPv6的IP上。如果你需要為不同的ASP.NET Core應用在同一埠上綁定不同的主機名,請使用WebListener或者諸如IIS,Nginx或Apache這樣的反向代理伺服器。

* "Localhost" 名稱和埠號或回送IP地址和埠號

http://localhost:5000/
http://127.0.0.1:5000/
http://[::1]:5000/

localhost被指定時,Kestrel會嘗試去綁定到IPv4和IPv6的環回介面。如果被請求的埠號正在任一環回介面上被其他服務所使用,Kestrel將會啟動失敗。如果任一環回介面出於各種原因而不可用(最通常的情況是因為IPv6暫不被支持),Kestrel將記錄下一個警告信息。

  • Unix socket
http://unix:/run/dan-live.sock

如果你指定了埠號0,Kestrel將動態地綁定到合適的埠號。除了localhost名稱,綁定到0埠號被其他任何主機名稱或IP地址所允許。

當你指定了埠號0,你可以使用IServerAddressesFeature介面去決定運行時Kestrel實際綁定到哪個埠。下列示例用於獲取綁定埠並且在console上顯示出來。

public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole();

    var serverAddressesFeature = app.ServerFeatures.Get<IServerAddressesFeature>();

    app.UseStaticFiles();

    app.Run(async (context) =>
    {
        context.Response.ContentType = "text/html";
        await context.Response
            .WriteAsync("<p>Hosted by Kestrel</p>");

        if (serverAddressesFeature != null)
        {
            await context.Response
                .WriteAsync("<p>Listening on the following addresses: " +
                    string.Join(", ", serverAddressesFeature.Addresses) +
                    "</p>");
        }

        await context.Response.WriteAsync($"<p>Request URL: {context.Request.GetDisplayUrl()}<p>");
    });
}

SSL的URL首碼

如果你調用UseSSL擴展方法,請確保在https:中包含URL首碼,如下所示:

var host = new WebHostBuilder() 
    .UseKestrel(options => 
    { 
        options.UseHttps("testCert.pfx", "testPassword"); 
    }) 
   .UseUrls("http://localhost:5000", "https://localhost:5001") 
   .UseContentRoot(Directory.GetCurrentDirectory()) 
   .UseStartup<Startup>() 
   .Build();

Note

HTTPS和HTTP不能在同一埠上被托管。

下一步

更多的信息,請參考以下資源:

本教程在本地僅使用Kestrel,在將該應用部署到Azure之後,它將在Windows上使用IIS作為反向代理伺服器。




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Shell十三問 轉載於網路,稍加整理。 <! more (一) 為何叫做Shell? 我們知道電腦的運作不能離開硬體,但使用者卻無法直接對硬體作驅動, 硬體的驅動只能透過一個稱為"操作系統(Operating System)"的軟體來控管 ,事實上, 我們每天所談的linux , 嚴格來說只是一 ...
  • [失敗] ...
  • 系統環境:Centos7 第一步安裝NodeJS 建議採用穩定編譯過的版本,source code稍麻煩,編譯過的直接可用,安裝超級簡單 下載完成後安裝成功 第二步:安裝PM2 正常情況我看到的是簡書上的 http://www.jianshu.com/p/fdc12d82b661 我的centos就 ...
  • Linux系統裁剪筆記 1.什麼裁剪? 本篇文章的主要目的是讓筆者和讀者更深的認識Linux系統的運作方式,大致內容就是把Linux拆開自己一個個組件來組裝,然後完成一個微型的Linux系統.下麵,讓我們來實現吧..寫的不好的地方請指教. 2.原理 大家都知道,操作系統的啟動流程是(主要是Linux ...
  • 最近的想要用android手機藍牙共用wifi網路給ubuntu16.04系統用,查了好多資料,發現網上很少有有用的。自己實踐後分享如下。 第一步:手機與電腦配對: 該步驟比較簡單,網上也可以找到相關的資料,大致步驟記錄如下(因手機不同略有不同): (1)打開手機藍牙,設置為對周圍設備可見(因手機不 ...
  • 前兩天入手一個Macbook air,在裝軟體過程中摸索了一些基本操作,現就常用操作進行總結, 1關於觸控板: 按下(不區分左右) =滑鼠左鍵 control+按下 =滑鼠右鍵 雙指上下拖 滾屏 雙指左右拖 瀏覽器前進/後退 三指左右拖 切換程式 三指上下拖 打開程式縮略圖/恢復 四指抓 打開所有程 ...
  • Hadoop的安裝非常簡單,可以在官網上下載到最近的幾個版本,最好使用穩定版。本例在3台機器集群安裝。hadoop版本如下: Hadoop的安裝非常簡單,可以在官網上下載到最近的幾個版本,最好使用穩定版。本例在3台機器集群安裝。hadoop版本如下: Hadoop的安裝非常簡單,可以在官網上下載到最 ...
  • .NET基礎知識點 l .Net平臺 .Net FrameWork框架 l .Net FrameWork框架提供了一個穩定的運行環境,;來保障我們.Net平臺正常的運轉 l 兩種交互模式 C/S:要求客戶的電腦上必須要安裝一個客戶端:qq、360、快播等..... B/S:要求客戶的電腦上只需要安裝 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...