ASP.NET Core'de web sunucusu uygulamaları

Yayınlayanlar Tom Dykstra, Steve Smith, Stephen Halter ve Chris Ross

Bir ASP.NET Core uygulaması, bir işlem içi HTTP sunucusu uygulamasıyla çalışır. Sunucu uygulaması HTTP isteklerini dinler ve bunları bir HttpContext içinde oluşturulan istek özellikleri kümesi olarak uygulamaya sunar.

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

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

ASP.NET Core Modülü, IIS ile işlemdeki IIS HTTP Sunucusu veya Kestrel arasında yerel IIS isteklerini işleyen yerel bir IIS modülüdür. Daha fazla bilgi için bkz. IIS için ASP.NET Core Modülü (ANCM).

Kestrel ve HTTP.sys

Kestrel HTTP.sys’ye göre aşağıdaki avantajlara sahiptir:

  • Daha iyi performans ve bellek kullanımı.
  • Platformlar arası
  • Çeviklik, işletim sisteminden bağımsız olarak geliştirilir ve yama uygulanır.
  • Programlı bağlantı noktası ve TLS yapılandırması
  • PPv2 ve alternatif aktarımlar gibi protokollere olanak tanıyan genişletilebilirlik.

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

Barındırma modelleri

Çeşitli barındırma modelleri mevcuttur:

  • Kestrel kendi kendine barındırma: Kestrel Web sunucusu, IIS veya HTTP.sys gibi başka bir dış web sunucusu gerektirmeden çalışır.

  • HTTP.sys kendi kendine barındırma, için Kestrelbir alternatiftir. Uygulama, Kestrel içinde bulunmayan özellikler gerektirmedikçe, HTTP.sys üzerinden Kestrel önerilir.

  • IIS işlem içi barındırma: ASP.NET Core uygulaması, IIS çalışan işlemiyle aynı işlemde çalışır. IIS işlem içi barındırma, isteklerin aynı makineye giden ağ trafiğini geri döndüren bir ağ arabirimi olan geri döngü bağdaştırıcısı üzerinden proksid olmadığı için IIS işlem içi barındırma, IIS işlem dışı barındırmaya göre geliştirilmiş performans sağlar. IIS işlem yönetimini Windows İşlem Etkinleştirme Hizmeti (WAS) ile işler.

  • IIS işlem dışı barındırma: ASP.NET Core uygulamaları IIS çalışan işleminden ayrı bir işlemde çalıştırılır ve modül işlem yönetimini işler. İlk istek geldiğinde modül ASP.NET Core uygulaması için işlemi başlatır ve uygulama kapanırsa veya kilitlenirse uygulamayı yeniden başlatır. Bu temelde, Windows İşlem Etkinleştirme Hizmeti (WAS) tarafından yönetilen, işlem içinde çalıştırılan uygulamalarda görünen davranışla aynıdır. Ayrı bir işlem kullanmak aynı uygulama havuzundan birden fazla uygulama barındırmayı da sağlar.

Daha fazla bilgi için, aşağıdakilere bakın:

Kestrel

Kestrel sunucu varsayılan, platformlar arası HTTP sunucusu uygulamasıdır. Kestrel en iyi performansı ve bellek kullanımını sağlar, ancak HTTP.sys'daki bazı gelişmiş özelliklere sahip değildir. Daha fazla bilgi için, Kestrel ve HTTP.sys belgesine bakın.

Kestrel kullanın:

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

    Kestrel communicates directly with the Internet without a reverse proxy server

  • Internet Information Services (IIS), Nginx veya Apache gibi bir ters ara sunucu ile. Ters ara sunucu İnternet'ten HTTP istekleri alır ve bunları Kestrel adresine iletir.

    Kestrel communicates indirectly with the Internet through a reverse proxy server, such as IIS, Nginx, or Apache

Ters ara sunucu içeren veya içermeyen barındırma yapılandırması desteklenir.

Yapılandırma Kestrel yönergeleri ve ters ara sunucu yapılandırmasında ne zaman kullanılacağı Kestrel hakkında bilgi için bkz Kestrel . ASP.NET Core'da web sunucusu.

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

IIS veya IIS Express kullanıldığında, uygulama Kestrel sunucusuyla IIS çalışan işleminden ayrı bir işlemde (işlem dışı) çalıştırılır.

ASP.NET Core uygulamaları IIS çalışan işleminden ayrı bir işlemde çalıştırıldığından, işlem yönetimini modül gerçekleştirir. İlk istek geldiğinde modül ASP.NET Core uygulaması için işlemi başlatır ve uygulama kapanırsa veya kilitlenirse uygulamayı yeniden başlatır. Bu temelde, Windows İşlem Etkinleştirme Hizmeti (WAS) tarafından yönetilen, işlem içinde çalıştırılan uygulamalarda görünen davranışla aynıdır.

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

ASP.NET Core Module

Web'den çekirdek modundaki HTTP.sys sürücüsüne istekler gelir. Sürücü istekleri web sitesinin yapılandırılmış bağlantı noktası üzerinden (genellikle 80 (HTTP) veya 443 (HTTPS)) IIS'ye yönlendirir. Modül istekleri uygulama için 80 veya 443 olmayan rastgele bir bağlantı noktası üzerinden Kestrel'e iletir.

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

Kestrel isteği modülden aldıktan sonra, istek ASP.NET Core ara yazılım işlem hattına gönderilir. Ara yazılım işlem hattı isteği işler ve bir HttpContext örneği olarak uygulamanın mantığına geçirir. IIS Tümleştirmesi tarafından eklenen ara yazılım, isteği Kestrel'e iletme işlemini gerçekleştirmek için şemayı, uzak IP'yi ve yol tabanını güncelleştirir. Uygulamanın yanıtı IIS'ye geri geçirilir ve IIS de bunu geriye, isteği başlatan HTTP istemcisine gönderir.

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 Kestrel öğesinin ters ara sunucu olarak nasıl kullanılacağı hakkında bilgi için, bkz. Nginx ile Linux üzerinde ASP.NET Core barındırma.

Kestrel ile Apache

Linux üzerinde Apache Kestrel öğesinin ters ara sunucu olarak nasıl kullanılacağı hakkında bilgi için, bkz. Apache ile Linux üzerinde ASP.NET Core barındırma.

HTTP.sys

ASP.NET Core uygulamaları Windows üzerinde çalıştırılıyorsa, HTTP.sys, Kestrel için bir alternatiftir. Uygulama, Kestrel içinde bulunmayan özellikler gerektirmedikçe, HTTP.sys üzerinden Kestrel önerilir. Daha fazla bilgi için, bkz. ASP.NET Core'da HTTP.sys web sunucusu uygulamaları.

HTTP.sys communicates directly with the Internet

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

HTTP.sys communicates directly with the internal network

HTTP.sys yapılandırma kılavuzu için, bkz. ASP.NET Core'da HTTP.sys web sunucusu uygulama.

ASP.NET Core sunucu altyapısı

Startup.Configure yönteminde bulunan IApplicationBuilder, IFeatureCollection türünün ServerFeatures özelliğini ortaya çıkarır. Kestrel ve HTTP.sys, IServerAddressesFeature öğesinin her biri için yalnızca tek bir özellik sunar, ancak farklı sunucu uygulamaları ek işlevsellik gösterebilir.

IServerAddressesFeature, sunucu uygulamasının çalışma zamanında hangi bağlantı noktasına bağlı olduğunu 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 (OWIN) kılavuzu, Nowin tabanlı IServer bir uygulama yazmayı gösterir. Yalnızca uygulamanın kullandığı özellik arabirimleri uygulama gerektirir, ancak en azından IHttpRequestFeature ve IHttpResponseFeature öğelerinin desteklenmesi gerekir.

Sunucu başlatma

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

Uygulamayı projenin klasöründeki bir komut isteminden başlatırken, dotnet run uygulamayı ve sunucuyu başlatır (Kestrel ve yalnızca HTTP.sys). Yapılandırma -c|--configuration seçeneği tarafından belirtilir ve bu seçenek Debug (varsayılan) veya Release olarak ayarlanır.

Bir launchSettings.json dosyası, Visual Studio gibi araçlarda yerleşik olarak bulunan bir hata ayıklayıcı ile dotnet run veya uygulaması başlatılırken yapılandırma sağlar. Başlatma profilleri bir launchSettings.json dosyasında varsa, dotnet run komutuyla --launch-profile {PROFILE NAME} seçeneğini kullanın veya Visual Studio'da profili seçin. Daha fazla bilgi için, bkz. dotnet çalıştırma ve .NET Core dağıtım paketleme.

HTTP/2 desteği

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

  • Kestrel
    • İşletim Sistemi
      • Windows Server 2016/Windows 10 veya üzeri†
      • OpenSSL 1.0.2 veya üzeri yüklü Linux (örneğin, Ubuntu 16.04 veya üzeri)
      • macOS 10.15 veya üzeri
    • Hedef çerçeve: .NET Core 2.2 veya üzeri
  • HTTP.sys
    • Windows Server 2016/Windows 10 veya üzeri
    • Hedef çerçeve: 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 çerçeve: .NET Core 2.2 veya üzeri
  • IIS (işlem dışı)
    • Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
    • Genel kullanıma yönelik uç sunucu bağlantıları HTTP/2 kullanır, ancak Kestrel için ters ara sunucu bağlantısı HTTP/1.1 kullanır.
    • Hedef çerçeve: IIS işlem dışı dağıtımları için geçerli değildir.

†Kestrel, Windows Server 2012 R2 ve Windows 8.1 üzerinde HTTP/2 için sınırlı desteğe sahiptir. Bu işletim sistemlerinde kullanılabilen desteklenen TLS şifreleme 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 İmza Algoritması (ECDSA) kullanılarak oluşturulan bir sertifika gerekebilir.

  • Kestrel
    • İşletim Sistemi
      • Windows Server 2016/Windows 10 veya üzeri†
      • OpenSSL 1.0.2 veya üzeri yüklü Linux (örneğin, Ubuntu 16.04 veya üzeri)
      • HTTP/2, gelecek bir sürümde macOS'ta desteklenecektir.
    • Hedef çerçeve: .NET Core 2.2 veya üzeri
  • HTTP.sys
    • Windows Server 2016/Windows 10 veya üzeri
    • Hedef çerçeve: 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 çerçeve: .NET Core 2.2 veya üzeri
  • IIS (işlem dışı)
    • Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
    • Genel kullanıma yönelik uç sunucu bağlantıları HTTP/2 kullanır, ancak Kestrel için ters ara sunucu bağlantısı HTTP/1.1 kullanır.
    • Hedef çerçeve: IIS işlem dışı dağıtımları için geçerli değildir.

†Kestrel, Windows Server 2012 R2 ve Windows 8.1 üzerinde HTTP/2 için sınırlı desteğe sahiptir. Bu işletim sistemlerinde kullanılabilen desteklenen TLS şifreleme 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 İmza Algoritması (ECDSA) kullanılarak oluşturulan bir sertifika gerekebilir.

  • Kestrel
    • İşletim Sistemi
      • Windows Server 2016/Windows 10 veya üzeri†
      • OpenSSL 1.0.2 veya üzeri yüklü Linux (örneğin, Ubuntu 16.04 veya üzeri)
      • HTTP/2, gelecek bir sürümde macOS'ta desteklenecektir.
    • Hedef çerçeve: .NET Core 2.2 veya üzeri
  • HTTP.sys
    • Windows Server 2016/Windows 10 veya üzeri
    • Hedef çerçeve: 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 çerçeve: .NET Core 2.2 veya üzeri
  • IIS (işlem dışı)
    • Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
    • Genel kullanıma yönelik uç sunucu bağlantıları HTTP/2 kullanır, ancak Kestrel için ters ara sunucu bağlantısı HTTP/1.1 kullanır.
    • Hedef çerçeve: IIS işlem dışı dağıtımları için geçerli değildir.

†Kestrel, Windows Server 2012 R2 ve Windows 8.1 üzerinde HTTP/2 için sınırlı desteğe sahiptir. Bu işletim sistemlerinde kullanılabilen desteklenen TLS şifreleme 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 İmza Algoritması (ECDSA) kullanılarak oluşturulan bir sertifika gerekebilir.

  • HTTP.sys
    • Windows Server 2016/Windows 10 veya üzeri
    • Hedef çerçeve: 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
    • Genel kullanıma yönelik uç sunucu bağlantıları HTTP/2 kullanır, ancak Kestrel için ters ara sunucu bağlantısı HTTP/1.1 kullanır.
    • Hedef çerçeve: IIS işlem dışı dağıtımları için geçerli değildir.

HTTP/2 bağlantısı Uygulama Katmanı Protokolü Anlaşması (ALPN) ve TLS 1.2 veya sonraki sürümleri kullanmalıdır. Daha fazla bilgi için sunucu dağıtım senaryolarınızla ilgili konulara bakın.

Ek kaynaklar