我使用varnish和memcached将我的piwik安装从apache服务器移动到nginx。我不知道什么时候,但在某些时候它停止了允许我登录,发出错误:
错误:表单安全性失败。请重新加载表单并检查 你的cookie已启用。如果您使用代理服务器,则必须 配置Piwik接受转发主机的代理头 头。另外,请检查您的Referrer标头是否已正确发送。
我不确定这里有什么问题,因为它已经工作了一段时间,直到我退出。我不知道它停在什么地方,但我相信我以后安装了memcached。
我尝试过:
proxy_client_headers[] = HTTP_X_FORWARDED_FOR
proxy_host_headers[] = HTTP_X_FORWARDED_HOST
在piwik配置中,它没有帮助。
在varnish配置中,我放在vcl_recv:
下if (req.url ~ "piwik" {
set req.http.X-Forwarded-For = client.ip;
return (pass);
}
这也没有帮助。
我的智慧在这里结束了。有没有人知道我的配置可能有什么问题,或者我怎么知道?我试着把#34;返回(通过)"在vcl_recv的顶部(假设这将基本上禁用所有清漆缓存)并且它没有帮助。有没有办法调试piwik以了解问题可能是什么?谢谢!
更新:经过很多头痛之后,我意识到这真的是一个不正确地清除piwik的清漆的情况。我无法想出一个有效的解决方案(我尝试了这里提供的解决方案)。
最终,我的解决方案:我在端口80上制作了清漆,但是piwik用nginx监听端口85,完全绕过了清漆。一切都100%有效!这显然不是最理想的解决方案,但它起作用,它可以节省我应该在其他地方花费的数小时的挫败感。感谢大家的帮助。
答案 0 :(得分:0)
我对此不太确定,但Form security failed
会向我建议可能Varnish缓存了登录页面。我认为登录表单中有一个CSRF令牌(唯一ID),每次都会更改。
因此,由于缓存,CSRF令牌始终相同,因此在您尝试登录时无效。您可以配置Varnish以便不缓存登录表单吗?
答案 1 :(得分:0)
使用piwik时必须绕过清漆
sub vcl_recv {
if (req.url ~ "^/piwik(.*)") {
return(pass);
}
}
如果使用子域名
sub vcl_recv {
if (req.http.Host == "piwik.domain.com") {
return (pipe);
}
}