在 nextcloud 官方 docker 镜像的自述文件中,指出建议在提供 SSL 的反向代理后面使用该镜像(来源)。虽然很明显,暴露在互联网上的安装需要加密连接,但这种特殊的实现方法让我(作为 Web 开发新手)感到很奇怪。
为什么建议使用反向代理,而不是在 Docker 映像中配置 Web 服务器,以便仅接受 SSL 连接?仅为 SSL 运行第二个功能齐全的 Web 服务器不是相当低效吗?
答案1
正如 @user1686 所说,这是“Docker 方式”:每个容器只做一件事,并做好它(关注点分离)。使用不同的容器,您还可以减少对提供的镜像进行修改的需要,并避免处理不同的软件依赖关系。
另一个好处是,您可以更自由地决定在何处运行什么。轻负载可以在单个服务器中运行,但随着负载的增加,您可能会发现运行多个 Nextcloud 容器实例(反向代理也充当负载平衡器)很有用,最初在同一台服务器上,后来在不同的服务器上运行以增加 I/O 带宽。
一个可能的附带好处是,如果出现 Nextcloud 漏洞,攻击者可以被限制在 Nextcloud 容器中,并且无法破解前端。
另请注意,即使没有 Docker,将 Apache/Nginx 前端(将执行 SSL 终止等)连接到应用程序服务器(Tomcat、Springboot 等)也是一个相当标准的程序。