如果我在 Docker 容器中 运行 一个 Node.js,我是否需要反向代理?
Do I need a reverse proxy if I'm running a Node.js in a Docker container?
我读过一些文章,建议在 Node.js 应用程序(例如那个:Advantages of a reverse proxy in front of Node.JS)之前使用反向代理(例如 nginx
)。这比 运行 Node.js 本身和公开它更好(至少在安全性方面)。
但是,运行 Node.JS 应用程序在 Docker 容器内应该可以防止安全问题(因为该应用程序 运行 在容器内并且与主机系统)。
所以,我的问题是:在 Docker 容器中使用 运行 Node.js 应用程序时使用反向代理是否有好处?如果是这样,它如何改进我的申请?
每次我不得不设置 Nginx 来代理到 Docker 容器时,不仅是为了安全方面,正如你提到的,它是自包含在 Docker 容器中的,而且也是为了方便分布式系统通信。
在标准架构中,您有一个 API 容器、一个 IDP 容器和一个前端容器(假设这是一个 Web 应用程序)。一切都在 Nginx 的背后。 IDP、API 和前端暴露在外部流量中……但有趣的部分来了。假设你想在不同的容器(地理定位服务、ETL 或其他任何东西)上有一个额外的服务 运行。该容器不需要暴露给 public。只有内部容器可以与之对话。
在前面的场景中,请求将到达前端,前端会将请求发送到 API,API 将使用 IDP(内部调用)验证令牌,如果未授权将前端重定向到 IDP(3 条腿身份验证)或只是 return 403,并通过再次将凭据发送回 API 让用户重新进行身份验证(2 条腿身份验证)。然后,如果用户需要调用任何其他服务,所有调用将首先通过 API,或者它们可以映射到 Nginx 中以直接访问服务,只需确保用户是 authenticated/authorized 即可使用服务。
我希望能对 Nginx 的特定用法有所启发。请记住,这只是 'one' 用例,但 Nginx 可用于许多其他目的。
我读过一些文章,建议在 Node.js 应用程序(例如那个:Advantages of a reverse proxy in front of Node.JS)之前使用反向代理(例如 nginx
)。这比 运行 Node.js 本身和公开它更好(至少在安全性方面)。
但是,运行 Node.JS 应用程序在 Docker 容器内应该可以防止安全问题(因为该应用程序 运行 在容器内并且与主机系统)。
所以,我的问题是:在 Docker 容器中使用 运行 Node.js 应用程序时使用反向代理是否有好处?如果是这样,它如何改进我的申请?
每次我不得不设置 Nginx 来代理到 Docker 容器时,不仅是为了安全方面,正如你提到的,它是自包含在 Docker 容器中的,而且也是为了方便分布式系统通信。
在标准架构中,您有一个 API 容器、一个 IDP 容器和一个前端容器(假设这是一个 Web 应用程序)。一切都在 Nginx 的背后。 IDP、API 和前端暴露在外部流量中……但有趣的部分来了。假设你想在不同的容器(地理定位服务、ETL 或其他任何东西)上有一个额外的服务 运行。该容器不需要暴露给 public。只有内部容器可以与之对话。
在前面的场景中,请求将到达前端,前端会将请求发送到 API,API 将使用 IDP(内部调用)验证令牌,如果未授权将前端重定向到 IDP(3 条腿身份验证)或只是 return 403,并通过再次将凭据发送回 API 让用户重新进行身份验证(2 条腿身份验证)。然后,如果用户需要调用任何其他服务,所有调用将首先通过 API,或者它们可以映射到 Nginx 中以直接访问服务,只需确保用户是 authenticated/authorized 即可使用服务。
我希望能对 Nginx 的特定用法有所启发。请记住,这只是 'one' 用例,但 Nginx 可用于许多其他目的。