uri +域上的清漆饼干

时间:2014-02-14 21:45:14

标签: caching cookies varnish vcl

我安装了清漆,为我的缓存内容提供服务 在我的网站上我有wordpress并添加了规则来剥离传入和传出的cookie,如果它们不属于wp-admin或wp-login

sub vcl_recv {
        if (!(req.url ~ "wp-(login|admin)")) {
                unset req.http.cookie;
        }
}

sub vcl_fetch {
        if (!(req.url ~ "wp-(login|admin)") {
                unset beresp.http.set-cookie;
        }
}

现在我在不同的域/子域上添加了一些其他需要启用cookie的网站;我试图添加规则,但没有成功,我解决的唯一方法是没有缓存一些域/子域。

我正在考虑类似的东西(包括recv和fetch),但它不起作用,它也违反了wordpress规则:

sub vcl_fetch {
        if (!(req.url ~ "wp-(login|admin)") || !(req.http.host ~ "ingredienti\.popeating\.it")) {
                unset beresp.http.set-cookie;
        }

}

1 个答案:

答案 0 :(得分:0)

如果大多数WP站点或非WP站点,正确的方法可能会有所不同。

鉴于您只有一个WP站点且WP域名为my.wordpress.tld,您应该将规则更改为:

sub vcl_recv {
  if ( req.http.host ~ "my.wordpress.tld"
    && ! (req.url ~ "wp-(login|admin)")
  ) {
    unset req.http.cookie;
  }
}
#...
sub vcl_fetch {
  if ( req.http.host ~ "my.wordpress.tld"
    && ! (req.url ~ "wp-(login|admin)")
  ) {
    unset beresp.http.set-cookie;
  }
}

可以很容易地将2 + WP网站的代码概括为req.http.host ~ "my.wordpress.tld"替换(req.http.host ~ "my1.wordpress.tld" || req.http.host ~ "my2.wordpress.tld")或类似my.not-wordpress.tld的表达式。

鉴于您只有一个NON-WP网站且NON-WP域名为sub vcl_recv { if ( ! req.http.host ~ "my.not-wordpress.tld" && ! (req.url ~ "wp-(login|admin)") ) { unset req.http.cookie; } } #... sub vcl_fetch { if ( ! req.http.host ~ "my.not-wordpress.tld" && ! (req.url ~ "wp-(login|admin)") ) { unset beresp.http.set-cookie; } } ,您应该将规则更改为:

req.http.host ~ "my.wordpress.tld"

同样,很容易概括2 + NON-WP网站的代码,将(req.http.host ~ "my1.not-wordpress.tld" || req.http.host ~ "my2.not-wordpress.tld")替换为vcl_fetch或类似的表达式。

注意:

  1. 您应该了解Cookie条带化的含义以及在请求中删除Cookie与避免在响应中设置Cookie之间的区别
  2. 在复制粘贴时要小心,因为vcl_recv和{{1}}
  3. 表示获取Cookie的过程并不相同