ASP.NET Core'de web sunucusu uygulamaları

Tom Dykstra, Steve Smith, Stephen Halterve Chris Chris Tarafından

Bir ASP.NET Core, işlem sırasında HTTP sunucusu uygulamasıyla çalışır. Sunucu uygulaması HTTP isteklerini dinler ve bunları bir içinde oluşan bir dizi istek özelliği olarak uygulamaya HttpContext gösterir.

ASP.NET Core aşağıdakilerle birlikte birlikte:

IIS veya IIS Express uygulamaşu şekilde çalışır:

ASP.NET Core Modülü, IIS ile işlem sırasındaKI IIS HTTP Sunucusu veya arasında yerel IIS isteklerini işlemeye yönelik yerel bir IIS Kestrel modülüdür. Daha fazla bilgi için bkz. ASP.NET Core Modülü.

Kestrel vs. HTTP.sys

Kestrel aşağıdaki avantajlara sahiptirHTTP.sys:

  • Daha iyi performans ve bellek kullanımı.
  • Platformlar arası
  • Çeviklik, işletim sistemi bağımsız olarak geliştirilmiş ve düzeltme eki uygulamalıdır.
  • Programlı bağlantı noktası ve TLS yapılandırması
  • PPv2 ve alternatif taşımalar gibi protokollere olanak sağlayan genişletilebilirlik.

Http.Sys, kestrel'in sahip olduğu aşağıdaki özelliklerle paylaşılan çekirdek modu bileşeni olarak çalışır:

Barındırma modelleri

İşlem içinde barındırmayı kullanan ASP.NET Core, IIS çalışan işlemiyle aynı işlemde çalışır. İstekler, giden ağ trafiğini aynı makineye geri döndüren bir ağ arabirimi olan geri döngü bağdaştırıcısı üzerinden ara sunucuya bağlı olmaması nedeniyle işlem içinde barındırma, işlem dışında barındırmaya göre daha iyi performans sağlar. IIS, Windows Etkinleştirme Hizmeti (WAS) ile işlem yönetimini ele almaktadır.

İşlem dışında barındırmayı kullanarak, ASP.NET Core IIS çalışan işleminden ayrı bir işlemde, modül ise işlem yönetimini ele almaktadır. Modül, ilk istek ASP.NET Core uygulamanın işlemini başlatır ve kapandığında veya kilitleniyorsa uygulamayı yeniden başlatır. Bu temelde, Windows Process Activation Service (WAS) tarafından yönetilen işlem içinde çalıştıran uygulamalarla görülen davranıştır.

Daha fazla bilgi ve yapılandırma kılavuzu için aşağıdaki konulara bakın:

Kestrel

Kestrel sunucusu varsayılan, platformlar arası HTTP sunucusu uygulamasıdır. Kestrel en iyi performansı ve bellek kullanımını sağlar, ancak bu hizmette bazı gelişmiş özelliklere HTTP.sys. Daha fazla bilgi için bu Kestrel belgede HTTP.sys karşılaştırması.

Kestrelkullanın:

  • Doğrudan İnternet dahil olmak üzere bir ağdan gelen uç sunucu işleme istekleri olarak tek başına.

    Kestrel ters ara sunucu olmadan doğrudan İnternet ile iletişim kurar

  • Internet Information Services (IIS), Nginxveya Apache gibi bir ters ara sunucu ile. Ters ara sunucu, İnternet'den HTTP isteklerini alır ve bu istekleri adresine Kestrel iletir.

    Kestrel IIS, Nginx veya Apache gibi bir ters ara sunucu üzerinden dolaylı olarak İnternet ile iletişim kurar

Bir ters ara — sunucu ile veya bu sunucu olmadan barındırma yapılandırması de — destekler.

Yapılandırma Kestrel kılavuzu ve ters ara sunucu yapılandırmasında ne zaman Kestrel kullanıla hakkında bilgi için KestrelASP.NET Core'de web sunucusu uygulaması bkz. .

ASP.NET Core aşağıdakilerle birlikte birlikte:

IIS veya IIS Expresskullanırken, uygulama sunucusuyla IIS çalışan işleminden (işlem dışında) ayrı bir işlemde Kestrel çalışır.

Uygulama ASP.NET Core IIS çalışan sürecinden ayrı bir işlemde çalıştırıla olduğundan, modül işlem yönetimini ele almaktadır. Modül, ilk istek ASP.NET Core uygulamanın işlemini başlatır ve kapandığında veya kilitleniyorsa uygulamayı yeniden başlatır. Bu temelde, Windows Process Activation Service (WAS) tarafından yönetilen işlem içinde çalıştıran uygulamalarla görülen davranıştır.

Aşağıdaki diyagramda IIS, ASP.NET Core Modülü ve işlem dışında barındırılan bir uygulama arasındaki ilişki göstermektedir:

ASP.NET Core Modülü

İstekler web'den çekirdek modu sürücüye HTTP.sys gelir. Sürücü, istekleri web sitesinin yapılandırılan bağlantı noktası üzerinden IIS'ye (genellikle 80 (HTTP) veya 443 (HTTPS) yönlendirmektedir. Modül, istekleri uygulamanın 80 veya 443 bağlantı noktası olmayan rastgele bir bağlantı noktasına Kestrel iletir.

modülü, başlatma sırasında bir ortam değişkeni aracılığıyla bağlantı noktasını belirtir ve IIS Tümleştirme Ara Yazılımı sunucuyu üzerinde dinleyecek şekilde yapılandırmaktadır. http://localhost:{port} Ek denetimler gerçekleştirilir ve modülden kaynaklanmazsa istekler reddedilir. Modül HTTPS iletmeyi desteklemez, bu nedenle istekler HTTPS üzerinden IIS tarafından alınsa bile HTTP üzerinden iletiliyor.

Modülden isteği alan istek, bir Kestrel ara yazılım işlem hattına ASP.NET Core olur. Ara yazılım işlem hattı isteği işler ve uygulamanın HttpContext mantığına örnek olarak iletir. IIS Tümleştirmesi tarafından eklenen ara yazılım, isteği adresine iletmeyi hesaba katacak şemayı, uzak IP'yi ve yol tabanını Kestrel günceller. Uygulamanın yanıtı IIS'ye geri geçirerek isteği başlatan HTTP istemcisine geri iter.

IIS ve ASP.NET Core Modülü yapılandırma kılavuzu için aşağıdaki konulara bakın:

Nginx ile Kestrel

Linux üzerinde Nginx'i için ters proxy sunucusu olarak kullanma hakkında bilgi için Kestrel bkz. ngınx ile Linux üzerinde ana bilgisayar ASP.NET Core .

Ile Apache Kestrel

Linux üzerinde Apache'yi için ters proxy sunucusu olarak kullanma hakkında bilgi için Kestrel bkz. Apache ile Linux üzerinde ASP.NET Core barındırma .

HTTP.sys

Uygulama ASP.NET Core bir Windows HTTP.sys alternatif olarak Kestrel kullanılabilir. Kestrel , uygulamanın içinde HTTP.sys gerektirdiği sürece uygulamanın üzerinde kullanılması Kestrel önerilir. Daha fazla bilgi için bkz. ASP.NET Core Web sunucusu uygulamasını HTTP.sys.

HTTP.sys İnternet ile doğrudan iletişim kurar

HTTP.sys, yalnızca bir iç ağa açık uygulamalar için de kullanılabilir.

HTTP.sys iç ağ ile doğrudan iletişim kurar

Yapılandırma HTTP.sys için bkz. ASP.NET Core Web sunucusu uygulamasını HTTP.sys .

ASP.NET Core sunucusu altyapısı

IApplicationBuilderyönteminde Startup.Configure kullanılabilir, türünün ServerFeatures özelliğini ortaya IFeatureCollection çıkarır. Kestrel ve HTTP.sys her biri yalnızca tek bir özelliği açığa çıkarır, ancak farklı IServerAddressesFeature sunucu uygulamaları ek işlevleri ortaya çıkarır.

IServerAddressesFeature , sunucu uygulamasının çalışma zamanında bağlı olduğu bağlantı noktasını bulmak için kullanılabilir.

Özel sunucular

Yerleşik sunucular uygulamanın gereksinimlerini karşılamıyorsa özel bir sunucu uygulaması oluşturulabilir. .Net Için açık Web arabirimi (OWıN) Kılavuzu , nowintabanlı bir uygulamanın nasıl yazılacağını gösterir IServer . Yalnızca uygulamanın kullandığı Özellik arabirimleri, en azından IHttpRequestFeature ve IHttpResponseFeature desteklenmesi gereken uygulama gerektirir.

Sunucu başlatma

Tümleşik geliştirme ortamı (IDE) veya düzenleyici uygulamayı başlattığında sunucu başlatılır:

Uygulamanın, projenin klasöründeki bir komut isteminden başlatılması sırasında DotNet Run uygulamayı ve sunucuyu başlatır ( Kestrel yalnızca HTTP.sys). Yapılandırma -c|--configuration seçeneğiyle belirtilir, Debug (varsayılan) veya olarak ayarlanır Release .

Dosya launchSettings.js dotnet run , Visual Studio gibi araç halinde yerleşik bir hata ayıklayıcı ile veya bir uygulama başlatırken yapılandırma sağlar. Başlatma profilleri dosyasında bir launchSettings.js varsa, --launch-profile {PROFILE NAME} komutuyla seçeneğini kullanın dotnet run veya Visual Studio profili seçin. Daha fazla bilgi için bkz. DotNet Run ve .NET Core Distribution paketleme.

HTTP/2 desteği

HTTP/2 aşağıdaki dağıtım senaryolarında ASP.NET Core desteklenir:

  • Kestrel
    • İşletim sistemi
      • Windows Server 2016/Windows 10 veya üzeri†
      • OpenSSL 1.0.2 veya üzerini içeren Linux (örneğin, Ubuntu 16,04 veya üzeri)
      • HTTP/2, gelecek sürümlerde macOS 'ta desteklenecektir.
    • Hedef Framework: .NET Core 2,2 veya üzeri
  • HTTP.sys
    • Windows Server 2016/Windows 10 veya üzeri
    • Hedef Framework: HTTP.sys dağıtımlar için geçerli değildir.
  • IIS (işlem içi)
    • Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
    • Hedef Framework: .NET Core 2,2 veya üzeri
  • IIS (işlem dışı)
    • Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
    • Herkese açık uç sunucu bağlantıları HTTP/2 kullanır, ancak ters proxy bağlantısı Kestrel http/1.1 'yi kullanır.
    • Hedef Framework: IIS işlem dışı dağıtımlar için geçerli değildir.

†KestrelWindows Server 2012 R2 ve Windows 8.1 üzerinde HTTP/2 için sınırlı destek içerir. Bu işletim sistemlerinde kullanılabilir olan desteklenen TLS şifre paketlerinin listesi sınırlı olduğundan destek sınırlıdır. TLS bağlantılarının güvenliğini sağlamak için Eliptik Eğri dijital Imza algoritması (ECDSA) kullanılarak oluşturulan bir sertifika gerekli olabilir.

  • Kestrel
    • İşletim sistemi
      • Windows Server 2016/Windows 10 veya üzeri†
      • OpenSSL 1.0.2 veya üzerini içeren Linux (örneğin, Ubuntu 16,04 veya üzeri)
      • HTTP/2, gelecek sürümlerde macOS 'ta desteklenecektir.
    • Hedef Framework: .NET Core 2,2 veya üzeri
  • HTTP.sys
    • Windows Server 2016/Windows 10 veya üzeri
    • Hedef Framework: HTTP.sys dağıtımlar için geçerli değildir.
  • IIS (işlem içi)
    • Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
    • Hedef Framework: .NET Core 2,2 veya üzeri
  • IIS (işlem dışı)
    • Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
    • Herkese açık uç sunucu bağlantıları HTTP/2 kullanır, ancak ters proxy bağlantısı Kestrel http/1.1 'yi kullanır.
    • Hedef Framework: IIS işlem dışı dağıtımlar için geçerli değildir.

†KestrelWindows Server 2012 R2 ve Windows 8.1 üzerinde HTTP/2 için sınırlı destek içerir. Bu işletim sistemlerinde kullanılabilir olan desteklenen TLS şifre paketlerinin listesi sınırlı olduğundan destek sınırlıdır. TLS bağlantılarının güvenliğini sağlamak için Eliptik Eğri dijital Imza algoritması (ECDSA) kullanılarak oluşturulan bir sertifika gerekli olabilir.

  • HTTP.sys
    • Windows Server 2016/Windows 10 veya üzeri
    • Hedef Framework: HTTP.sys dağıtımlar için geçerli değildir.
  • IIS (işlem dışı)
    • Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
    • Herkese açık uç sunucu bağlantıları HTTP/2 kullanır, ancak ters proxy bağlantısı Kestrel http/1.1 'yi kullanır.
    • Hedef Framework: IIS işlem dışı dağıtımlar için geçerli değildir.

Bir HTTP/2 bağlantısı, uygulama katmanı protokol anlaşması (ALPN) ve TLS 1,2 veya üstünü kullanmalıdır. Daha fazla bilgi için, sunucu dağıtım senaryolarınıza ait konulara bakın.

Ek kaynaklar