0

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

简而言之,我的配置:

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

清漆以循环方式从 2 个后端拉出。

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

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

有没有一种方法可以让我正常工作,以便无论处理它的后端如何,会话变量都是相同的?

4

1 回答 1

6

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

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

寻找一些可以申请代码的库/可重用代码,祝你好运!

于 2011-07-20T21:01:13.297 回答