我正在阅读 asp.net core app
中的 Kestrel
web服务器,特别是 in-process http server
和 reverse proxy
.
作为季节性的Web开发人员,我无法理解背后的想法:
-
in-process http server
实施在核心应用中的相关性? -
反向代理方法的重要性超过任何典型的
web server
? -
除了转发
http request
之外,问题的类型是否在asp.net核心世界中解决了反向代理问题? -
如果要将asp.net核心应用程序部署在容器中,如何
reverse proxy
和Kestrel
关联/通信(1:n
或1:1
)?
1 回答
根据official documentation:
除了拥有进程内http服务器使开发人员更容易使用东西 . 他们只是下载框架,安装它,无论他们使用什么操作系统(Windows,Linux或MacOS)或他们想要在以后使用什么Web服务器,它都可以开箱即用 . 他们只是启动
dotnet run
命令,启动http服务器,并在其上托管一个Web应用程序 .虽然在应用程序准备好 生产环境 时可以在开发环境中运行它,但开发人员应该记住安全性 . Kestrel Web服务器是一个非常新的Web服务器,因此它不具备IIS,Apache或Nginx在其长寿期间获得的所有安全性和其他有用功能 . 这是MS建议在 生产环境 环境中使用反向代理的唯一原因 . 反向代理的目标不仅是对进程内http服务器的转发请求,还负责安全性,压缩和良好的Web服务器可能提供的其他功能 .
至于容器部署,它实际上取决于您想要实现的目标 . 有不同的场景:
在同一容器中运行ASP.NET Core应用程序和反向代理 . 在这种情况下,ASP.NET核心应用程序通常配置为在本地端口上运行,例如5000,而反向代理绑定到端口80.通常不推荐这种方法,因为最佳实践说"Each container should have only one concern"
在2个不同的容器中运行反向代理和ASP.NET Core应用程序 . 在这种情况下,您必须将这些容器相互链接,以便将请求从反向代理转发到Web应用程序 .
在一个容器上运行反向代理,并将其配置为多个ASP.NET核心应用程序容器的反向代理 .