我想使用Varnish来caching某些页面,即使存在cookie。 有三种可能性,我需要照顾:
预期的行为将是:
我已经阅读了一些关于Varnish的文档,我不知道这是默认行为,还是在VCL中需要做一些设置才能实现。
默认情况下,Varnish不会使用Cookie标头caching请求:
http://varnish-cache.org/svn/trunk/varnish-cache/bin/varnishd/default.vcl
sub vcl_recv { (...) if (req.http.Authorization || req.http.Cookie) { /* Not cacheable by default */ return (pass); } return (lookup);
您需要将所需的行为编码到configuration中。 请注意,Cookie是客户端请求的一部分,而不是“页面”(实际上是对象)。 “页面”(对象)带有一个“Set-Cookie”头 – 这是将被caching的。
此外,“变化:Cookie”并不意味着“不要caching”。 这意味着caching一个对象的每个Cookie接收到的值。
如果您的应用程序没有生成基于Cookie的任何内容,忽略它可能是安全的:
- if (req.http.Authorization || req.http.Cookie) { + if (req.http.Authorization) {
做一些testing,你会得到它的挂钩。 希望这可以帮助。
如果我正确地理解了你,你不需要一个特定的cookie作为键的一部分 – 但你需要保持完好?
你需要将vcl_hash中的散列设置为req.url + req.http.host(也可能是其他),但不是特定的cookie。
我认为我的一个post可以帮助你在正确的方向: 忽略Varnish VCL中的GET参数