清漆排除网址

时间:2012-11-02 08:36:55

标签: caching varnish

我有一个目前有效的清漆3.xx服务器。 Varnish正在缓存我网站的登录页面。

www.mysite.com/staff

但根据工作人员的链接,它可能有不同的网址,例如

www.mysite.com/staff/index.php?/Tickets/Ticket/View/222200

我的清漆配置文件设置如下,以排除缓存工作人员页面,但它不起作用,因为它缓存登录页面,它将不会登录,直到我重新启动清漆以清除它的缓存。

sub vcl_recv {
    # Allow purge only from internal users
    if (req.request == "PURGE") {
        if (!client.ip ~ internal_net) {
            error 405 "Not allowed.";
        }
        return (lookup);

    # Exclude the following
    if (req.url ~ "^/login\.php" ||
      req.url ~ "^/search\.php" ||
      req.url ~ "^/admin(.*)" ||
      req.url ~ "^/admin(.*)" ||
      req.url ~ "^/search(.*)" ||
      req.url ~ "^/visitor(.*)" ||
      req.url ~ "^/staff(.*)" ||
      req.url ~ "^/staff\.php"
    )  {
        return(pass);

    }

    if (req.http.cookie ~ "vb(.*)" ||
        req.http.cookie ~ "bb(.*)" ||
        req.http.cookie ~ "SWIFT_(.*)" ||
        req.url ~ "\?(.*\&)?s=[a-fA-F0-9]{32}(\&|$)" ||
        req.http.cookie ~ "bb_password") {

        return(pass);
    } else {
        unset req.http.cookie;
    }
}

你是否有另一种方法可以排除和整个目录被缓存? IE:来自/ staff的所有内容,无论后缀是什么,都不能被缓存

1 个答案:

答案 0 :(得分:3)

排除应该完全按照您实施的方式运作。但是,如果您粘贴的代码是您的实际VCL,则在PURGE部分中有一个打开的if()语句。

    sub vcl_recv {
        # Allow purge only from internal users
        if (req.request == "PURGE") {
                if (!client.ip ~ internal_net) {
                        error 405 "Not allowed.";
                }
                return (lookup);

# Exclude the following

应该阅读

    sub vcl_recv {
        # Allow purge only from internal users
        if (req.request == "PURGE") {
                if (!client.ip ~ internal_net) {
                        error 405 "Not allowed.";
                }
                return (lookup);
        }

# Exclude the following

Varnish不应接受无效的VCL,因此如果您的实际VCL中不存在该错误,请使用您的整个VCL更新问题。