我想有一个前端服务器,我的客户端可以连接,并根据客户端,被重定向(透明)到另一个 flask 应用程序,将处理特定的客户端需求(例如,可以有不同的应用程序)。我还希望能够添加/删除/重新启动这些后端客户端,只要我想,而不杀死其他客户端的主服务器。我希望客户:
最好的办法是什么?
cig3rfwq1#
您所描述的前端服务器本质上就是所谓的reverse proxy。反向代理从客户端接收请求,并将其转发到客户端无法直接访问的第二行内部服务器。通常,根据请求URL的某些方面来决定将请求转发到哪个内部服务器。例如,可以为每个内部应用程序分配不同的子域。反向代理收到来自内部服务器的响应后,会将其转发到客户端,就好像它是自己的响应一样。内部服务器的存在不会显示给客户端。解决身份验证问题很简单,只要所有的内部服务器共享相同的身份验证机制和用户数据库。每个请求都将附带身份验证信息。例如,这可能是由登录请求设置的会话cookie、直接用户凭据或某种类型的身份验证令牌。在所有情况下,您都可以在所有应用程序中以相同的方式验证登录。Nginx是一种流行的Web服务器,可以很好地用作反向代理。
0yycz8jy2#
听起来像是您希望为具有单个入口点的服务端点集合设置单点登录。我会考虑将我的所有服务部署为Flask应用程序,而不知道它们是如何架构的。它们所知道的是,所有资源请求都需要某种与它们相关联的凭据。传递这些凭据的方式可以不同。您可以使用FAS Flask Auth Plugin之类的东西来处理身份验证。或者,您可以做一些更简单的事情,比如将提供给入口服务的凭据打包到对其他服务的后续请求的HTTP标头中。Flask.request.headers将使您能够访问正确的报头以传递给身份验证服务。当涉及到细节时,您可以选择很多方法,但我认为这种通用架构应该适合您。
Flask.request.headers
2条答案
按热度按时间cig3rfwq1#
您所描述的前端服务器本质上就是所谓的reverse proxy。
反向代理从客户端接收请求,并将其转发到客户端无法直接访问的第二行内部服务器。通常,根据请求URL的某些方面来决定将请求转发到哪个内部服务器。例如,可以为每个内部应用程序分配不同的子域。
反向代理收到来自内部服务器的响应后,会将其转发到客户端,就好像它是自己的响应一样。内部服务器的存在不会显示给客户端。
解决身份验证问题很简单,只要所有的内部服务器共享相同的身份验证机制和用户数据库。每个请求都将附带身份验证信息。例如,这可能是由登录请求设置的会话cookie、直接用户凭据或某种类型的身份验证令牌。在所有情况下,您都可以在所有应用程序中以相同的方式验证登录。
Nginx是一种流行的Web服务器,可以很好地用作反向代理。
0yycz8jy2#
听起来像是您希望为具有单个入口点的服务端点集合设置单点登录。
我会考虑将我的所有服务部署为Flask应用程序,而不知道它们是如何架构的。它们所知道的是,所有资源请求都需要某种与它们相关联的凭据。传递这些凭据的方式可以不同。您可以使用FAS Flask Auth Plugin之类的东西来处理身份验证。或者,您可以做一些更简单的事情,比如将提供给入口服务的凭据打包到对其他服务的后续请求的HTTP标头中。
Flask.request.headers
将使您能够访问正确的报头以传递给身份验证服务。当涉及到细节时,您可以选择很多方法,但我认为这种通用架构应该适合您。