nginx / passenger / memcached / rails2.3.5的最大年龄

时间:2010-09-18 19:58:15

标签: ruby-on-rails regex memcached nginx passenger

我注意到在我的生产环境中(我已经实现了memcached)在firebug中看到了一个cache-control-max-age标头,只要我在查看索引页面(例如帖子)。

Cache-Control   max-age=315360000

在我的开发环境中,标题如下所示。

Cache-Contro private, max-age=0, must-revalidate

据我所知,我没有对我的nginx.conf文件做任何特别的事情来指定常规内容的最大年龄,我确实为css,jpg等设置了expires-max。这里是我的nginx.conf文件..

http://pastie.org/1167080

那为什么要设置缓存控制呢?如何控制此缓存控制,因为这样做的副作用有点不好。这就是发生的事情。

1 - 用户请求all_posts列表并获取10个页面的列表(分页)

2 - 创建用户视图页面1,2 3和相应的缓存。

3 - 用户返回第1页,firefox甚至没有向服务器发出请求。通常我会期望它会重新获得并点击步骤#2中创建的缓存。

另一个问题是,如果创建了一个新帖子,现在缓存已刷新并且它应位于第1页的顶部,则用户无法看到它...因为浏览器没有访问服务器

请帮忙!

由于

更新:

我尝试在我的索引操作中设置expires_now。没有差别,max-age仍然是相同的大值。

这可能是我的max-age正则表达式的问题吗?我基本上希望它只匹配资产文件(图像,js,css等)

1 个答案:

答案 0 :(得分:0)

我认为你的max-age正则表达式存在问题,这是正确的。

您正在匹配此模式:^.+.(jpg|jpeg|gif|png|css|js|swf)?([0-9]+)?$

因为在两个带括号的部分后面都有问号(“这部分是可选的”),所以正则表达式的唯一必要部分是请求URI至少有两个字符(.+.)。换句话说,它几乎匹配到您网站的每个请求。

这是我们使用的模式:\.(js|css|jpg|jpeg|gif|png|swf)$

这将仅匹配以点结尾的路径的请求,然后匹配这七种模式中的一种。