一台服务器,两个站点,一台缓存了varnish,另一台不能删除会话

2024-09-29 02:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

场景如下: 1个EC2微实例,托管2个站点、1个wordpress博客和1个烧瓶驱动的站点,比如:wpsite.com网站&安培;烧瓶网站. 两者都是用nginx提供的,nginx在8080上监听,然后varnish监听80充当nginx的代理。我只需要缓存wpsite.com网站我想跳过缓存引擎烧瓶网站。在

这是VCL:

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

acl purge {
    "127.0.0.1";
}

sub vcl_recv {
   if (!req.http.host ~ "^(www\.)?wpsite\.com$") {
        return(pass);
   }

   remove req.http.X-Forwarded-For;
   set req.http.X-Forwarded-For = client.ip;

   if (req.request == "PURGE") {
     if (!client.ip ~ purge) {
       error 405 "Not allowed.";
     }
     return(lookup);
   }
  if (req.http.Accept-Encoding) {
    #revisit this list
    if (req.url ~ "\.(gif|jpg|jpeg|swf|flv|mp3|mp4|pdf|ico|png|gz|tgz|bz2)(\?.*|)$") {
      remove req.http.Accept-Encoding;
    } elsif (req.http.Accept-Encoding ~ "gzip") {
      set req.http.Accept-Encoding = "gzip";
    } elsif (req.http.Accept-Encoding ~ "deflate") {
      set req.http.Accept-Encoding = "deflate";
    } else {
      remove req.http.Accept-Encoding;
    }
  }
  if (req.url ~ "\.(gif|jpg|jpeg|swf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") {
    unset req.http.cookie;
    set req.url = regsub(req.url, "\?.*$", "");
  }
  if (req.url ~ "\?(utm_(campaign|medium|source|term)|adParams|client|cx|eid|fbid|feed|ref(id|src)?|v(er|iew))=") {
    set req.url = regsub(req.url, "\?.*$", "");
  }
  if (req.http.cookie) {
    if (req.http.cookie ~ "(wordpress_|wp-settings-)") {
      return(pass);
    } else {
      unset req.http.cookie;
    }
  }
}

sub vcl_fetch {
  if (req.url ~ "manager" || req.url ~ "wp-(login|admin)" || req.url ~ "preview=true" || req.url ~ "xmlrpc.php") {
    return (hit_for_pass);
  }
  if ( (!(req.url ~ "manager" ||  req.url ~ "(wp-(login|admin)|login)")) || (req.request == "GET") ) {
    unset beresp.http.set-cookie;
   set beresp.ttl = 1h;
  }
  if (req.url ~ "\.(gif|jpg|jpeg|swf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") {
    set beresp.ttl = 365d;
  }
}

sub vcl_deliver {
   if (obj.hits > 0) {
     set resp.http.X-Cache = "HIT";
   } else {
     set resp.http.X-Cache = "MISS";
   }
}
sub vcl_hit {
  if (req.request == "PURGE") {
    set obj.ttl = 0s;
    error 200 "OK";
  }
}

sub vcl_miss {
  if (req.request == "PURGE") {
    error 404 "Not cached";
  }
}

问题是: 一切似乎都很好,但是: 我有一个登录系统烧瓶网站这依赖于cookie会话:如果我登录,系统会正常工作,但是如果我想注销,cookie仍然存在。在

这些是烧瓶网站登录/注销:

^{pr2}$

如果我在nginx和客户之间涂上清漆,所有的工作都很有魅力。 感谢您的任何提示:)


Tags: httpurlreturnif烧瓶网站cookierequest