托管ASP.NET MVC 6的“最佳”方式是选择最符合您应用需求的方式,当然!但就建议而言,这可能没那么有用。
首先,您需要考虑应用程序的要求,例如:
- 是否需要跨平台运行?
- 是否需要健康管理?
- 是否需要使用现有的IIS模块?
- 是否需要在其他应用程序的上下文中运行?
- 是否需要使用Windows身份验证?
- 毫无疑问还有更多要求......
以下是各种托管选项及其优缺点的简要概述:
- IIS可能是最知名的主机。它已经硬化了十多年。许多流行的模块都可用,包括提供各种安全功能。 IIS内置支持Windows身份验证,日志记录,应用程序预热,运行状况管理,远程管理和lots of other features。
- IIS Express与IIS共享相同的代码库,但可以在没有管理员权限的情况下运行。
- Kestrel是一个跨平台的Web服务器,作为ASP.NET 5的一部分编写,目前最适合开发工作。它非常轻巧,可以是好的(没有任何阻碍!)和坏(不是很多功能)。
- 自我托管是您掌握自己域名的地方。几乎所有事情都取决于你,包括弄清楚如果存在不可恢复的错误会发生什么。如果您需要在应用程序中托管服务器(例如,使用Web服务器来托管UI或应用程序直接使用的服务的客户端应用程序),则自托管是一个很好的选择。
当然没有一种“最佳”方式来托管ASP.NET MVC 6应用程序,但肯定有许多解决方案可以满足各种需求。
在我对ASP.NET vNext is host agnostic, what does it deeply mean?的回答中,我介绍了宿主不可知论的其他几个方面。
ASP.NET Core 1.1回答
- 1.1版本添加了GZIP压缩和响应缓存。
- Kestrel仍未经过安全测试,如果没有IIS或NGINX作为反向代理,则不应使用它。这会在某些时候发生变化。
- Kestrel仍然不支持HTTP 2.0。
- 在MVC 6中使用IIS或NGINX比MVC 5慢。是的MVC 6应该更快,但前提是你自己使用Kestrel。
ASP.NET Core 1.0答案
IIS或NGINX是ASP.NET MVC 6应用程序的最佳主机。以下是没有IIS或NGINX时无法获得的功能列表,而无需额外的工作。请注意,所有这些功能都需要在web.config文件中进行少量配置。
- Kestrel Web服务器尚未经过加固处理并经过安全测试。它不应该暴露在互联网上......但是。
- Kestrel不支持HTTP 2.0。
- GZIP压缩HTTP请求以节省带宽和提高性能。仅这一点就足够了。
- ASP.NET之外的错误处理。当你的.dll文件丢失时会发生什么? IIS仍会显示错误页面,您也可以自定义错误页面。
- 动态IP安全 - 在拒绝服务(DoS)攻击期间,会显示一个非常简单且小巧的403.501或403.502禁止静态错误页面。