对于为什么要在经典的三层架构中使用 Nginx 以及使用 Gunicorn/Flask 应用程序来提供静态内容,有很多明确的答案。
我想要部署的架构是不同的,我不明白在这种情况下将 Nginx 放在 Gunicorn 前面是否有意义。
就我而言,我在 Node.js 中有一个典型的后端,但是当新数据被发送到后端时,它会将其发送到 Gunicorn/Flask 应用程序进行异步处理。
Node 应用程序和 Gunicorn/Flask 应用程序位于两个不同的 Docker 容器中,并通过 docker 网络进行通信。只有 Node 应用程序与 Gunicorn/Flask 应用程序进行通信。
将 Nginx 放在 Gunicorn/Flask 应用程序前面是否有意义,因为它不提供静态内容并且不连接到“外部世界”?
谢谢你!
编辑:
我根据 Michael Hampton 的评论添加了新信息:
还有一个由 Nginx 提供服务的前端组件。传入流量由 traefik 重定向到前端组件或我使用 pm2 的 Node 后端组件。
有两个 docker 网络。一方面是用于 traefik 的网络,除了 traefik,前端和 Node 后端组件也连接到该网络,因为它们必须可以从外部访问。另一方面,有一个内部网络,Node 后端组件和 Gunicorn/Flask 应用程序连接到该网络,以确保 Gunicorn/Flask 应用程序不能从外部访问。
目前,Node 后端组件通过内部 docker 网络通过 Gunicorn 为其提供服务的端口直接向 Flask 应用程序发送请求。由于我不希望它从外部访问,因此到 Gunicorn 的流量不会通过 traefik 重定向。
这是一个好的方法吗?或者我应该在 Gunicorn/Flask 容器中将 Nginx 之类的东西放在 Gunicorn 前面?