翻译 - ASP.NET Core 基本知识 - Server

翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/?view=aspnetcore-5.0&tabs=macos

ASP.NET Core 应用程序运行在进程内实现的服务器。服务器实现监听 HTTP 请求,并使它们作为一组请求特性(request features)构成 HttpContext 提供给应用程序。

Kestrel

Kestrel server 是一个跨平台的 HTTP 服务器实现,是默认的服务器。 Kestrel 提供了最好的性能和内存利用,但是它没有 Http.Sys 里面的一些高级功能,例如端口共享。

使用 Kestrel:

  • 它本身可以作为一个边缘服务器来处理直接来自网络的请求,包括因特网。
  • 使用反向代理服务器,例如,Internet Information Services (IIS)Nginx,或者 Apache。反向代理服务器从因特网接收 HTTP 请求,然后转发给 Kestrel。

不管有没有反向代理服务器,托管配置都是受支持的。

更多关于在反向代理配置中何时使用 Kestrel 的配置指导和信息,查看 Kestrel web server implementation in ASP.NET Core

Nginx with Kestrel

关于如何在 Linux 上使用 Nginx 作为 Kestrl 反向代理配置信息,查看 Host ASP.NET Core on Linux with Nginx

Apache with Kestrel

关于如何在 Linux 上使用 Apache 作为 Kestrel 反向代理配置信息,查看 ASP.NET Core on Linux with Apache

HTTP.sys

如果 ASP.NET Core 应用程序运行在 Windows 上,HTTP.sys 是使用 Kestrel 的一种方法。建议使用 Kestrel 优先于 HTTP.sys,除非应用程序需要的功能在 Kestrel 中不可用。更多信息,查看 HTTP.sys web server implementation in ASP.NET Core

 

HTTP.sys 也可以用于只对内部网络开放的应用程序。

 

关于 HTTP.sys 配置指导,查看 HTTP.sys web server implementation in ASP.NET Core

ASP.NET Core 服务器基础架构

Startup.Configure 方法中的 IApplicationBuilder 方法暴露了类型为 IFeatureCollection 的 ServerFeatures 属性。Kestrel 和 HTTP.sys 只暴露了一个单一的特性,IServerAddressesFeature,但是不同的服务器实现可能暴露更多的功能。

ISserverAddressesFeature 可以用于查找服务器实现在运行时绑定的端口号。

 

自定义服务器

如果内置的服务器不能满足应用程序的需求,可以创建一个自定义的服务器实现。Open Web Interface for .NET (OWIN) guide 展示了如何编写一个基于 Nowin IServer 的实现。只有应用程序需要的功能接口需要实现,不过至少 IHttpRequestFeature 和 IHttpResponseFeature 必须被支持。

服务器启动

当集成开发环境 (IDE) 或者 编辑器启动应用程序的时候,服务器会被加载:

当通过命令行在工程目录中启动应用程序时,dotnet run 命令启动应用程序和服务器 (只包含 Kestrel 和 HTTP.sys)。通过选项 -c|--configuration 可以指定配置,Debug (默认) 或者 Release。

launchSettings.json 文件提供了使用 dotnet run 或者内置在工具中的调试器,例如 Visual Studio,启动应用程序时需要的配置。如果启动需要的配置文件保存在 launchSetting.json 文件,使用带有 --launch-profile {PROFILE_NAME} 选项的 dotnet run 命令或者在 Visual Studio 中选择指定的配置文件。更多信息查看 dotnet run 和 .NET Core distribution packaging

 

HTTP/2 支持

在下列部署场景中,ASP.NET Core 支持 HTTP/2

  • Kestrel
    操作系统:
    Windows Server 2016/Windows 或者更新版本
    Linux 带有 OpenSSL1.0.2 或者更新版本(例如 Ubuntu 16.04 或者更新版本)
    HTTP/2 在 macOS 未来的版本中会受支持
    框架目标:.NET Core 2.2 或者更新版本
  • HTTP.sys
    Windows Server 2016/Windows 10 或者更新版本
    目标框架:HTTP.sys 部署中不适用
  • IIS (in-process)
    Windows Server 2016/Windows 10 或者更新版本,IIS 10 或者更新
    目标框架: .NET Core 2.2 或者更新版本
  • IIS (out-of-process)
    Windows Server 2016/Windows 10 或者更新版本,IIS 10 或者更新
    面向公共的边缘计算服务器连接使用 HTTP/2,但是反向代理到 Kestrel 的连接使用 HTTP/1.1
    目标框架:不适用

Kestrel 在 Windows Server 2012 R2 和 Windows 8.1 上对 HTTP/2 的支持受限。支持受限的原因是一组受支持的 TLS 加密套件在这些操作系统上的支持受限。一个使用 Elliptic Curve Digital Signature Algorithm (ECDSA) 生成的证书可能要求安全的 TLS 连接。

HTTP/2 连接必须使用 Application-Layer Protocol Negotiation (ALPN) 和 TLS 1.2 或者更新版本。更多信息,查看适合你的服务器部署情景的话题。

posted @ 2021-01-30 17:13  sims  阅读(113)  评论(0编辑  收藏  举报