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

时间:2012-01-18 10:38:13

标签: 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 - 所以在幕后,通过负载均衡器,他可以访问www.server * 2 *。com。 所以在这里,所需的表单数据,对我的问题更重要的可能是 - '请求'数据(如Python Django中的request.SOMETHING)将丢失?因为它可能是在会议之前保存的,在www.server * 1 *。com,现在它在www.server * 2 *。com?中丢失了/ p>

2 个答案:

答案 0 :(得分:0)

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

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

  1. 在服务器之间共享会话(中央会话存储)
  2. 始终将用户转发到同一边缘服务器。一些负载均衡器将forwared-to edge服务器存储在cookie中。在后续请求中,用户每次都被转发到相同的边缘节点。相同的边缘节点将保留该用户的会话,因此没有问题。

答案 1 :(得分:0)

是的,这是一个有效的问题。由于Web(HTTP)的性质,其他请求可能最终在另一台服务器上。此问题称为持久性或粘性。

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

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