nginx 可从Flask服务器访问多个后端服务器

bybem2ql  于 2023-03-01  发布在  Nginx
关注(0)|答案(2)|浏览(170)

我想有一个前端服务器,我的客户端可以连接,并根据客户端,被重定向(透明)到另一个 flask 应用程序,将处理特定的客户端需求(例如,可以有不同的应用程序)。
我还希望能够添加/删除/重新启动这些后端客户端,只要我想,而不杀死其他客户端的主服务器。
我希望客户:

  • 未检测到后端中存在其他服务器(URL应该是同一主机)
  • 当他们被重定向到其他进程时,不必重新输入他们的凭据

最好的办法是什么?

cig3rfwq

cig3rfwq1#

您所描述的前端服务器本质上就是所谓的reverse proxy
反向代理从客户端接收请求,并将其转发到客户端无法直接访问的第二行内部服务器。通常,根据请求URL的某些方面来决定将请求转发到哪个内部服务器。例如,可以为每个内部应用程序分配不同的子域。
反向代理收到来自内部服务器的响应后,会将其转发到客户端,就好像它是自己的响应一样。内部服务器的存在不会显示给客户端。
解决身份验证问题很简单,只要所有的内部服务器共享相同的身份验证机制和用户数据库。每个请求都将附带身份验证信息。例如,这可能是由登录请求设置的会话cookie、直接用户凭据或某种类型的身份验证令牌。在所有情况下,您都可以在所有应用程序中以相同的方式验证登录。
Nginx是一种流行的Web服务器,可以很好地用作反向代理。

0yycz8jy

0yycz8jy2#

听起来像是您希望为具有单个入口点的服务端点集合设置单点登录。
我会考虑将我的所有服务部署为Flask应用程序,而不知道它们是如何架构的。它们所知道的是,所有资源请求都需要某种与它们相关联的凭据。传递这些凭据的方式可以不同。您可以使用FAS Flask Auth Plugin之类的东西来处理身份验证。或者,您可以做一些更简单的事情,比如将提供给入口服务的凭据打包到对其他服务的后续请求的HTTP标头中。Flask.request.headers将使您能够访问正确的报头以传递给身份验证服务。
当涉及到细节时,您可以选择很多方法,但我认为这种通用架构应该适合您。

相关问题