多实例(服务器)网站(Python Django/PHP)上的网站表单(POST)

多实例(服务器)网站(Python Django/PHP)上的网站表单(POST),django,forms,instances,Django,Forms,Instances,假设我有一个PHP/Python Django网站。 该网站正在多个实例服务器上运行。 这意味着网站的URL是www.test.com,它可以从负载平衡器将客户端连接到www.server1.com或www.server2.com等等 如果网站上有表格,且该表格的处理位于同一页面上: 是否存在以下情况 -用户访问www.test.com-在幕后,通过负载平衡器,他可以访问www.server*1*.com。他填表。 -表单操作URL是针对www.test.com的,因此在幕后,通过负载平衡器,他

假设我有一个PHP/Python Django网站。 该网站正在多个实例服务器上运行。 这意味着网站的URL是www.test.com,它可以从负载平衡器将客户端连接到www.server1.com或www.server2.com等等

如果网站上有表格,且该表格的处理位于同一页面上: 是否存在以下情况 -用户访问www.test.com-在幕后,通过负载平衡器,他可以访问www.server*1*.com。他填表。 -表单操作URL是针对www.test.com的,因此在幕后,通过负载平衡器,他可以访问www.server*2*.com。
因此,在这里,所需的表单数据,对我的问题来说可能更重要的是“请求”数据,比如request.pythondjango会缺少什么?因为它可能以前保存在会话的www.server*1*.com上,现在在www.server*2*.com上丢失了它?

请求将始终包含所有数据,因为这些数据会被转发到边缘服务器。request.POST和request.GET将拥有来自请求的所有数据。但是,问题是会话数据可能在该边缘服务器上不可用。例如,您在server1上启动了会话,然后从server2请求另一个页面。server2可能会分配新会话并禁止您访问某些内容

要解决此会话问题,可以执行以下两项操作之一:

在服务器之间共享会话中央会话存储 始终将用户转发到同一边缘服务器。一些负载平衡器将forwared to edge服务器存储在cookie中。在后续请求中,用户每次都会被转发到同一边缘节点。同一边缘节点将保留该用户的会话,因此没有问题。
是的,这是一个合理的担忧。由于Web HTTP的性质,其他请求可能会在其他服务器上结束。这个问题称为持久性或粘性

这里的解决方案是使用cookie在客户端保存所有这些信息,而不是依赖服务器端会话。因此,您可以使用Python/Django像这样实现它。使用客户端方法可以提供最佳性能,并且应该是最容易实现的


请记住,此解决方案对中间人攻击具有相当大的安全风险,除非您使用HTTPS对SSL/TSL连接进行加密,因为所有客户端数据都存储在cookie中,可能会被截获。

但是,如果您想进行故障转移,没有选项1,选项2本身是不够的。假设您将会话保存在第一台服务器上,而在下一个请求中,该服务器不可用。您已经丢失了客户端的状态。@UkuLoskit我看不出如果负载平衡器没有出现故障,网站将如何工作。不过,提供故障保护将是一个好主意。对不起,我指的是服务器,而不是负载平衡器。