首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Varnish缓存受密码保护的数据

使用Varnish缓存受密码保护的数据
EN

Stack Overflow用户
提问于 2012-03-15 04:42:33
回答 1查看 1K关注 0票数 0

我希望生成的资源只提供给具有管理权限的用户,并且我希望Varnish为我缓存它,这样后端就不必在每次请求它时重新生成它。我也不想在后端执行缓存,因为我有用于此目的的Varnish。

下面是我的后端所做的伪代码:

代码语言:javascript
复制
if (authenticated(cookie)) 
{
    if (stale)
    {
        regenerate_and_send()
    }
    else
    {
         not_modified()
    }
}
else
{
     access_denied()
}

因此,我在考虑Varnish执行验证(条件GET)和后端响应“未修改”、“访问被拒绝”或“200OK”HTTP状态(当然,在最后一种情况下重新生成资源)。

我需要Varnish将cookie传递到后端,但在缓存中存储资源时忽略cookie,因此只存储了一个副本。

我该怎么做呢?

执行验证和编写后端逻辑都很容易。我如何在Varnish中处理cookie,使它们不影响缓存,但仍然被传递到后端?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-16 06:38:40

默认情况下,如果请求有cookie,Varnish不会在缓存中查找,因此您必须编写自己的vcl配置文件。

如果我没理解错的话,有问题的资源可以提供给所有具有管理员特权的用户。这里的故事是这样的:每个用户都有一个不同的会话cookie,而varnish无法知道哪个会话cookie是管理员特权的。你可以(至少)做两件事:

如果用户获得管理员权限,

  1. 将设置'admin=yourmagicstringhere‘cookie。使Varnish能够验证magicstring是否正确,并相应地对资源的请求执行查找/获取操作。
  2. 总是将请求转发到后端(不需要在缓存中查找/存储),如果用户是管理员特权,后端会生成请求,该请求已被解决。作为ESI的替代方案,您可以让后端生成一些其他OK响应,然后重新启动,您可以在其中执行lookup/fetch/deliver.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9709982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档