我已经阅读了一些建议在Node.js应用程序之前使用反向代理(如nginx
)的文章(例如:Advantages of a reverse proxy in front of Node.JS)。这比运行Node.js本身并暴露它更好(至少在安全性方面)。
但是,在Docker容器中运行Node.JS应用程序应该可以防止出现安全问题(因为应用程序在容器内运行并且与主机系统隔离)。
所以,我的问题是:在Docker容器中运行Node.js应用程序时使用反向代理有什么好处吗?如果是这样,它如何改善我的申请?
答案 0 :(得分:3)
每次我必须设置Nginx代理到Docker容器时,不仅是因为安全方面,正如你所提到的那样,它是自包含在Docker容器中的,也是为了促进分布式系统通信。
在标准体系结构中,您有一个API容器,一个IDP容器和一个前端容器(假设这是一个Web应用程序)。一切都落后于Nginx。 IDP,API和前端暴露于外部流量......但这里有趣的部分。假设您希望在不同的容器(地理定位服务,ETL或其他任何容器)上运行其他服务。那个容器不需要暴露给公众。只是内部容器可以与它通信。
在上一个场景中,请求将命中前端,前端会将请求发送到API,API将使用IDP(内部调用)验证令牌,如果未授权,则将前端重定向到IDP(3)有腿认证)或只返回403并通过再次将凭证发送回API来让用户reauth(2腿认证)。然后,如果用户需要调用任何其他服务,所有调用将首先通过API,或者它们可以在Nginx中映射以直接命中服务,只需确保用户已经过身份验证/授权即可使用该服务。
我希望能够对Nginx的特定用法有所了解。请记住,这只是一个'用例,但Nginx可用于许多其他目的。