ruby on Rails 应用程序使用 Varnish 缓存管理 cookie

标签 ruby ruby-on-rails-3.2 varnish varnish-vcl

我想用我新部署的 Rails Web 应用程序来实现 Varnish。

Rails version 3.2.12 with

Ruby 1.9.2p318 (2012-02-14 revision 34678) [i686-linux]

在我的应用程序中,用户身份验证是通过cookie完成的,但是当cookie存在时,varnish不会缓存内容。所以我发现对于登录的用户,varnish正在将请求转发到我的应用程序。我对varnish很陌生,不知道如何解决这个问题。也许我需要在 vernish 配置文件中添加一些 block 。但是事情是实时的,用户正在使用我的应用程序。我已经停止了 varnish。任何具体的帮助都会得到真正的应用。

最佳答案

我在这个博客中找到了解决方案Ruby on Rails, Varnish and user dependent content我认为根据博客的解决方案是:

获得此问题的简单解决方案的一个好方法是将应用程序 cookie 添加到 Varnish 用于查找缓存内容的哈希中。这是在配置文件的 vcl_hash 函数中完成的:

sub vcl_hash {
   if (req.http.Cookie ~ "your_application_cookie") {
     hash_data(req.url);
     hash_data(req.http.Cookie);
 return (hash);
   }
}

关于ruby on Rails 应用程序使用 Varnish 缓存管理 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16237678/

相关文章:

ruby-on-rails - 在 Ruby 哈希中提取 `Moped::BSON::Document` 属性

ruby-on-rails - Ruby on Rails 标签与 HTML 标签

ruby-on-rails - 回形针 Errno::EACCES(权限被拒绝 -/system)

ruby-on-rails - 什么时候在 ROR 中声明回调方法 Private 或 Protected?

http - Varnish:隐藏内部后端请求

ruby - 除了读取实例变量,attr_reader 在 ruby​​ 中还有哪些用途

ruby-on-rails - 为什么 User.first 第一次查询数据库的时间比较长?

ruby - RSpec - 如何测试是否调用了不同类的方法?

caching - 是否可以使用相同的 url 和不同的 cookie 值(语言)来改变页面缓存(具有缓存版本)?

php - Varnish Cache 不会做 ESI include