Node.js 如何在Docker中仅允许从前端访问后端

Node.js 如何在Docker中仅允许从前端访问后端,node.js,reactjs,docker,devops,Node.js,Reactjs,Docker,Devops,我有一个应用程序,React用于前端,Node.js用于后端。应用程序将上载到Digital Ocean,如何隐藏后端,以便用户只能访问前端。如果docker使用: 您可以将前端和后端拆分为不同的容器,前端从外部进行访问,后端隐藏在Docker内部的网络后面。您的前端将通过Docker的内部网络按应用程序名称调用后端 您还可以使用nginx隐藏前端和后端。使用nginx访问docker网络中的前端。事实证明,从外部访问只能访问nginx 阅读更多无法隐藏后端的原因是React默认使用客户端渲染。

我有一个应用程序,React用于前端,Node.js用于后端。应用程序将上载到Digital Ocean,如何隐藏后端,以便用户只能访问前端。

如果docker使用: 您可以将前端和后端拆分为不同的容器,前端从外部进行访问,后端隐藏在Docker内部的网络后面。您的前端将通过Docker的内部网络按应用程序名称调用后端

您还可以使用nginx隐藏前端和后端。使用nginx访问docker网络中的前端。事实证明,从外部访问只能访问nginx


阅读更多

无法隐藏后端的原因是React默认使用客户端渲染。这意味着客户端使用浏览器调用后端。有一些方法可以确保后端的安全,例如使用访问令牌或在服务器前面放置Web应用程序防火墙。 我相信有一些方法可以让您的前端作为服务器端呈现来工作,但是默认情况下,作为一个单页应用程序,它将执行客户端呈现

本文可能有助于您理解:

问题有点广泛,但我认为基本上您希望限制对后端的访问。你不能隐藏你的后端,因为它仍然需要从你的前端应用程序访问,而且因为它是一个webapp,这意味着它应该可以从任何地方访问。也就是说,您可以用许多不同的方式保护它,但至少您的应用程序需要处理身份验证和授权的概念。这是一个非常广泛的主题,但我希望它能给你一个提示。问题是前端页面通常呈现在客户端。这意味着前端将从外部与后端通信。因此,没有内部访问,例如从后端到数据库的访问,这两种访问都是服务器端的。因此,例如,当前端应用程序调用localhost时,localhost将是相对于您的客户端而不是服务器的。这同样适用于使用应用程序名称。它们在服务器之外没有任何意义。服务器端渲染(SSR)可能是一个例外。但我没有这方面的经验。