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

dri*_*nxy 0 php session caching varnish round-robin

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

我的配置简而言之:

server0 - varnish,be1 - apache,be2 - apache

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

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

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

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

ivy*_*ivy 6

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

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

寻找一些您可以申请代码的图书馆/可重复使用的代码,祝您好运!