Varnish - 在循环导演中提供cookie /会话时缓存

时间:2011-07-20 04:45:47

标签: php session caching varnish round-robin

我是第一次配置清漆,我遇到了一个问题,到目前为止我还没有找到完整的答案。

我的配置简而言之:

server0 - 清漆, be1 - apache, be2 - apache

清漆从循环中的2个后端拉出。

我需要处理会话,所以我配置了一个简单的php脚本,它在会话变量中设置当前时间,然后重定向到第二页,显示该会话变量和后端使用的ip。 / p>

我设法让这一半工作。它正在从我所看到的内容传递会话信息,但问题是这样 - 从后端返回的信息特定于它生成的后端。因此,返回的时间取决于是否为最后一个缓存调用了be1或be2。

有没有办法可以使这个工作正常,以便会话变量是相同的,无论处理它的后端如何?

1 个答案:

答案 0 :(得分:6)

这是会话的一般问题; cookie(随每个请求一起发送)包含会话的标识符。真实会话数据存储在服务器或数据库中。有几种解决方案,例如:

  1. 粘性会话;设置一个额外的cookie变量(例如be = 1或be = 2)或使会话ID可识别地属于后端1或2.然后,Varnish可以决定请求应该到哪个后端服务器。如果后端发生故障,您的会话将丢失(没有“会话故障转移”)
  2. 将会话数据存储在数据库,memcached或所有后端共享的其他数据存储中
  3. 不要使用会话,而是序列化cookie中的所有数据。由于客户端不可信(客户端可以更改cookie),请确保验证数据是否未被禁用,例如签署您的数据
  4. 查找一些可以申请代码的库/可重用代码,祝你好运!