【问题标题】:Do I need a reverse proxy if I'm running a Node.js in a Docker container?如果我在 Docker 容器中运行 Node.js,是否需要反向代理?
【发布时间】:2017-09-07 00:54:35
【问题描述】:

我读过一些文章,推荐在 Node.js 应用程序之前使用反向代理(例如 nginx)(例如:Advantages of a reverse proxy in front of Node.JS)。这比运行 Node.js 本身并公开它要好(至少在安全性方面)。

但是,在 Docker 容器中运行 Node.JS 应用程序应该可以防止安全问题(因为应用程序在容器中运行并且与主机系统隔离)。

所以,我的问题是:在 Docker 容器中运行 Node.js 应用程序时使用反向代理有什么好处吗?如果是这样,它如何改进我的应用程序?

【问题讨论】:

  • 在最常见的情况下,Nginx 被用作负载均衡器和 Internet 和 Web 应用程序之间的反向代理。当然,您可以使用 NodeJS 解决方案涵盖这些用例,但 Nginx 已经过实战考验,并且通常更适合与 NodeJS 一起使用。

标签: node.js security nginx docker reverse-proxy


【解决方案1】:

每次我不得不设置 Nginx 代理到 Docker 容器时,不仅是为了安全方面,正如你提到的,它是自包含在 Docker 容器中的,也是为了促进分布式系统通信。

在标准架构中,您有一个 API 容器、一个 IDP 容器和一个前端容器(假设这是一个 web 应用程序)。一切都在 Nginx 背后。 IDP、API 和前端暴露于外部流量……但有趣的部分来了。假设您希望在不同的容器上运行附加服务(地理定位服务、ETL 或其他任何东西)。该容器不需要向公众公开。只有内部容器可以与之对话。

在前面的场景中,请求将到达前端,前端会将请求发送到 API,API 将使用 IDP 验证令牌(内部调用),如果未授权,则将前端重定向到 IDP(3 legged 身份验证)或仅返回 403 并通过再次将凭据发送回 API 来让用户 reauth(2 legged auth)。然后如果用户需要调用任何额外的服务,所有的调用都将首先通过 API,或者它们可以映射到 Nginx 中直接访问服务,只需确保用户经过身份验证/授权使用该服务。

我希望对 Nginx 的特定用法有所了解。请记住,这只是“一个”用例,但 Nginx 可以用于许多其他目的。

【讨论】:

    猜你喜欢
    • 2016-01-16
    • 2017-05-19
    • 2020-08-11
    • 2011-05-31
    • 2021-05-04
    • 2011-10-09
    • 1970-01-01
    • 2017-07-11
    • 2019-12-07
    相关资源
    最近更新 更多