2017-02-19 32 views
0

У меня был базовый default.vcl для моего сайта, и он работал.После добавления мобильного обнаружения в лак {default.vcl} лак не запускается

Я добавил нижеприведенный код, чтобы обнаруживать и обслуживать разные темы для пользователей, если они приходят на ПК или на мобильный. После добавления нижеприведенного кода для обнаружения мобильного устройства лак не запускается.

Как решить этот так лак обнаруживает мобильное устройство и поэтому мобильная тема подается в тот же URL, если посещенных мобильный, настольный



    /* 
    * 
    * First, set up a backend to answer the request if there's not a cache hit. 
    * 
    */ 
    backend default { 

     # Set a host. 
     .host = "xx.xx.xx.xx"; 

     # Set a port. 80 is normal Web traffic. 
     .port = "xxxx"; 
    } 
    /* 
    * 
    * Next, configure the "receive" subroutine. 
    * 
    */ 
    acl admin_ip { 
     "xx.xx.xx.xx"; 
    } 
    include "devicedetect.vcl"; 
    sub vcl_recv { 
      call devicedetect; 
      if (req.request == "PURGE") { 
      if (!client.ip ~ admin_ip) { 
       error 405 "You can't do this, muggle!"; 
      } 
       return(lookup); 
     } 
    if (!req.backend.healthy) { 
     unset req.http.Cookie; 
     } 
    set req.http.X-Forwarded-For = client.ip; 

     # Use the backend we set up above to answer the request if it's not cached. 
     #set req.backend = default; 

     if (req.url ~ "^/user/login" || 
      req.url ~ "^/oc-admin" || 
      req.url ~ "^/item/new" || 
      req.request == "POST") 
     { 
      return (pass); 
     } 
     if (req.url ~ "(?i)\.(pdf|asc|dat|txt|doc|xls|ppt|tgz|csv|png|gif|jpeg|jpg|ico|swf|css|js)(\?.*)?$") { 
     unset req.http.Cookie; 
     unset req.http.Cache-Control; 
     unset req.http.Max-Age; 
     unset req.http.Pragma; 
     unset req.http.Cookie; 
     } 
     if(req.http.Cookie) { 
     if (req.http.Cookie !~ "(sessionid|XXXid)") { 
      remove req.http.Cookie; 
     } 
     } 
     # Pass the request along to lookup to see if it's in the cache. 
     return(lookup); 
    } 
    /* 
    * 
    * Next, let's set up the subroutine to deal with cache misses. 
    * 
    */ 
    sub vcl_miss { 

     # We're not doing anything fancy. Just pass the request along to the 
     # subroutine which will fetch something from the backend. 
     return(fetch); 
    } 
    /* 
    * 
    * Now, let's set up a subroutine to deal with cache hits. 
    * 
    */ 
    sub vcl_hit { 

     # Again, nothing fancy. Just pass the request along to the subroutine 
     # which will deliver a result from the cache. 
     return(deliver); 
    } 
    /* 
    * 
    * This is the subroutine which will fetch a response from the backend. 
    * It's pretty fancy because this is where the basic logic for caching is set. 
    * 
    */ 
    sub vcl_fetch { 

    if (req.http.X-UA-Device) { 
      if (!beresp.http.Vary) { # no Vary at all 
       set beresp.http.Vary = "X-UA-Device"; 
      } elseif (beresp.http.Vary !~ "X-UA-Device") { # add to existing Vary 
       set beresp.http.Vary = beresp.http.Vary + ", X-UA-Device"; 
      } 
     } 
     #unset beresp.http.expires; # for cloudfront since it prefers cache-control 
            # header over expires 

     if (req.url ~ "(?i)\.(pdf|asc|dat|txt|doc|xls|ppt|tgz|csv|png|gif|jpeg|jpg|ico|swf|css|js)(\?.*)?$") { 
     unset beresp.http.set-cookie; 
     } 
     if (req.http.Content-Type ~ "(image|audio|video|pdf|flash)") { 
      set beresp.do_gzip = false; 
     } 
     if (req.http.Content-Type ~ "text") { 
      set beresp.do_gzip = true; 
     } 
     # Varnish determined the object was not cacheable 
     if (beresp.ttl 0) { 
     set resp.http.X-Varnish-Cache = "HIT"; 
     } 
     else { 
     set resp.http.X-Varnish-Cache = "MISS"; 
     } 

     return (deliver); 
    } 

ответ

0

вы можете попробовать начать лак с

varnishd -F -f /etc/varnish/default.vcl 

, чтобы вы могли видеть все сообщения/ошибки. Кстати: вы включаете devicedetect.vcl. без этого файла трудно сказать, что происходит не так;)

+0

после использования выше упомянутой команды он показал мне, как ошибку в # Varnish determined the object was not cacheable if (beresp.ttl 0) { set resp.http.X-Varnish-Cache = "HIT"; } else { set resp.http.X-Varnish-Cache = "MISS"; }, поэтому я меняю это (beresp.ttl 0 as (beresp.ttl> = 0s), а затем начинается лак но это не cahing ничего –

+0

устройство обнаруживает vcl [link] (https://github.com/varnishcache/varnish-devicedetect/blob/master/devicedetect.vcl) –