【问题标题】:When self-hosting ASP.NET Core - does it use http.sys if available?自托管 ASP.NET Core 时 - 如果可用,它是否使用 http.sys?
【发布时间】:2016-11-21 23:53:01
【问题描述】:

http.sys 是 Windows 中的内核模式驱动程序,它极大地加快了传入 HTTP 请求的处理和路由。它是在 Windows NT 4 时代添加的,与 Apache 相比,它为当时尚不成熟的 IIS 提供了基准提升。

对于那些不熟悉的人:它是一个劫持传入 HTTP 请求的组件(在端口 80 和 443 上,您也可以将其配置为监视其他端口)并根据其配置将它们路由到不同的用户级应用程序,请参阅 MSDN 了解更多详细信息: https://msdn.microsoft.com/en-us/library/windows/desktop/aa364510(v=vs.85).aspx

今天,只要您使用 IIS 来托管您的应用程序,您就可以利用 http.sys

但是,我找不到任何说明自托管 ASP.NET Core 应用程序是否将使用 http.sys(如果存在)的信息。

【问题讨论】:

  • 我找到了Rick Strahl的这个页面。 他说: 首先,如果您想在一台服务器上运行多个共享端口 80 和端口 443 的应用程序,则不能直接运行 Kestrel。 Kestrel 不支持在单个 IP 地址上允许多个端口 80 绑定所需的主机头路由。如果没有 IIS(实际上是 http.sys),您目前无法单独使用 Kestrel 来执行此操作(我认为这也没有计划)。看起来,它没有......
  • 所以如果它在后台使用http.sys,它也将支持主机头路由,这就是我的理解,也许我错了......

标签: asp.net-core http.sys


【解决方案1】:

虽然 Kestrel 不使用或不支持 http.sys(它也必须在没有 http.sys 的 Linux 上运行),但您可以使用 WebListener(也可以使用 here,它使用 http.sys 和用法)例如here) 来实现这一点。但是,出于明显的原因,仅在 Windows 上。

与 Kestrel 不同,WebListener 被认为是生产就绪的,这意味着您可以使用它来托管面向互联网的应用程序。另一边的 Kestrel 还没有,所以写这篇文章时的官方建议是始终在反向代理(IIS、nginx 等)后面使用 Kestrel。

【讨论】:

    猜你喜欢
    • 2018-12-10
    • 2018-11-22
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多