用于 asp.net 核心应用程序生产的红隼准备好了吗?

Posted

技术标签:

【中文标题】用于 asp.net 核心应用程序生产的红隼准备好了吗?【英文标题】:Is kestrel for asp.net core application production ready? 【发布时间】:2018-10-04 11:50:30 【问题描述】:

我有一个在 asp.net core 2.0 中开发的 Angular 应用程序使用的 api 它已部署在 IIS 中并配置为使用 kestrel。

我读到 Kestrel 在公开公开应用程序时并不安全等等。 真的吗?红隼还没有准备好用于生产吗?或红隼完全用于不同的目的,就像很少有博客说的内部应用程序一样。

【问题讨论】:

【参考方案1】:

是的,Kestrel is production ready 并且在 .NET Core 支持的所有平台和版本上都受支持,但是如果您的应用程序在公共网络上可用 Microsoft recommend,您可以将其与反向代理一起使用:

即使不需要反向代理服务器,使用反向代理服务器也可能是一个不错的选择。

您可以在 MSDN 文档中找到有关 hosting ASP.NET Core apps 选项的更多信息,包括 on Windows with IIS、on Linux with nginx 和 on Linux with Apache 等。

使用反向代理的原因有很多,包括:

    在同一个 IP 和端口上运行多个应用程序 限制暴露的表面积 额外的配置和防御层 简化的负载平衡和 SSL 设置(例如,这些可以在反向代理中终止) 更好地支持静态文件、压缩等。

根据您的要求,上述不同方面对您来说可能或多或少很重要。

例如,Kestrel 是一个非常轻量级的 Web 服务器,专门用于运行 ASP.NET Core 应用程序,但要做到这一点,它没有 IIS 或 Apache 之类的许多功能,您可能会发现这些功能是您想要的.例如,处理图像、CSS 或 JS 等静态文件不需要由 ASP.NET Core 引擎处理 - 使用 IIS 您可以自动压缩这些文件并添加缓存标头以加快后续页面加载。同样,IIS 可以在请求到达处理器之前处理重定向和路由。

从安全的角度来看,再次,您可以在请求到达 Kestrel 之前利用请求过滤(即使用的动词、路径等)、IP 过滤、身份验证等功能,而不必处理这些代码中的各个方面。

请注意,for ASP.NET Core 1.x,文档更加具体:

如果您将应用程序公开到 Internet,则必须使用 IIS、Nginx 或 Apache 作为反向代理服务器。反向代理服务器接收来自 Internet 的 HTTP 请求,并在进行一些初步处理后将其转发给 Kestrel。

【讨论】:

但是如果你在 IIS 下使用它,我认为它会降低 kestrel 的速度,对吗? 使用 ASP.NET Core 运行站点不再需要 IIS,您可以根据需要在 Linux 发行版上运行它,或者在没有 IIS 的 Windows Server Core 上运行它,但是微软仍然建议在提供功能齐全的 Web 服务器的额外安全性和性能优势的服务器。 @Zhaph-BenDuguid 是的。容易地。但如果他们前面已经有东西了,我会试试看 :) 非常感谢您的意见! 2021 年夏天,.NET 5.0 已经发布。这个答案有什么变化? Kestrel 是否足够成熟,可以公开公开应用程序? @Justin 不多。它仍处于生产就绪状态,并且支持暴露在互联网上,但它不支持,也不计划支持完整网络服务器的所有功能。

以上是关于用于 asp.net 核心应用程序生产的红隼准备好了吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 Ubuntu 上创建的红隼服务因错误而停止 (code=exited, status=200/CHDIR)

如何让红隼网络服务器监听非本地主机请求?

带有反应模板的 Asp.net 核心 Web 应用程序:在开发中,服务器首先检查 mvc 路由,但在生产中服务器仅返回 index.html

用于 asp.net 核心应用程序的 ngrok 和 https 隧道

用于引导切换的 asp.net 核心 mvc 标签助手

用于 asp.net 核心的 Service Fabric 中 docker 中的 HTTPS 不起作用