在ASP.NET核心上实际上是否需要反向代理?

时间:2019-05-07 16:55:57

标签: asp.net-core kestrel-http-server asp.net-core-2.2 asp.net-docker-extensions

我们想知道大多数用例是否真的需要反向代理,并且希望了解更多信息。

Kerstel / Nginx文档声称: “ Kestrel非常适合从ASP.NET Core提供动态内容。但是,Web服务功能不像IIS,Apache或Nginx这样的服务器具有丰富的功能。反向代理服务器可以减轻诸如提供静态内容,从HTTP服务器缓存请求,压缩请求和HTTPS终止。反向代理服务器可以驻留在专用计算机上,也可以与HTTP服务器一起部署。” https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2

如果这实际上与当今相关,谁能请大家分享一些见解?

在我们的用例中,我们使用具有外部负载平衡(AWS ALB)的Docker实例。 每个docker实例都运行Nginx和我们的ASP.NET Core应用程序。 我们无法弄清楚使用Nginx的确切好处。

  1. 提供静态内容 当我们使用外部CRN(AWS CloudFront)时,我认为静态缓存实际上并没有任何实际好处,是吗?

  2. 缓存请求 我认为这与提供静态内容相同,因为在大多数情况下(在我们的用例-所有情况下)都不会缓存动态内容。

  3. 压缩请求 ASP.NET Core有一个响应压缩中间件,但是它声称:“中间件的性能可能与服务器模块的性能不匹配。HTTP.sys服务器服务器和Kestrel服务器当前不提供内置的压缩​​支持。 ”。 也许可以创建一些基准来验证这一主张。 https://docs.microsoft.com/en-us/aspnet/core/performance/response-compression?view=aspnetcore-2.2

  4. 来自HTTP服务器的HTTPS终止 我认为大多数具有负载均衡器的客户端都可以跳过这一部分,因为可以根据需要在负载均衡器上完成HTTPS终止。

谢谢! 效果

1 个答案:

答案 0 :(得分:2)

本文档不会告诉您“应该”在反向代理后面运行ASP.NET Core / Kestrel,只是高级方案可以从中受益,因为Kestrel不具备其他Web服务器可能具有的某些功能。

如果您不需要使用其他Nginx反向代理,则无需使用。

例如Kestrel只是最近才采用的API,可以在不重启的情况下即时更改某些连接参数-这有助于切换通过ACME(例如Let’s Encrypt服务)获取的证书。

是否需要反向代理在很大程度上取决于系统体系结构,但是如果您不需要特定功能,则不必部署反向代理。