客户联系我们与login系统的问题在我们编码的网页之一。 有时用户以其他人的身份login。 尽pipe我们尝试过,但是我们无法复制它。 我怀疑Varnish是造成这种情况的(自从第一次客户报告这个问题是在系统pipe理员设置之后),但是我没有太多的经验,我们的系统pipe理员似乎不愿意帮忙。
该页面使用ESI 。 所有用户特定的包括根本不被caching,但有一个例外:在单独的包含头中有用户名。 我们用Vary: Cookiecaching这个ESI,所以这应该不成问题。
我们在服务器上的设置是Nginx – > Varnish – > Apache。 这是我们的光油configuration。 Nginx不应该caching任何东西(至less系统pipe理员声称如此)。
我怀疑在Varnishconfiguration中有一些错字或configuration错误。 任何提示,欢迎。
我怀疑这可能与你的vcl_hash函数有关。 如果你不需要它,请发表评论,看看会发生什么 – 在模拟客户端设置的testing服务器中首先尝试。
详细信息如下 (我是新的清漆,所以这是我的理解):
该function是清漆用来“标记”caching内容的function。 基于这里的逻辑,哈希是请求url,主机或服务器ip。 如果user1出现并在clientapp.com上login,varnish将使用主机clientapp.com标记该页面。 所以当user2出现在同一个主机上的时候,varnish会根据散列函数中的规则来查看页面是否已经被caching,并且在不应该的时候把caching的页面传递给user2。 如果user2通过访问服务器的IP地址login,我敢打赌你会看到他们的信息。 但是,如果user3通过IP地址login,他/她将看到user2的信息。
sub vcl_hash { hash_data(req.url); //This is never used 'cos of the lines that follow if (req.http.host) { hash_data(req.http.host); } else { hash_data(server.ip); } return (hash); }