У меня был базовый 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);
}
после использования выше упомянутой команды он показал мне, как ошибку в
# 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 ничего –устройство обнаруживает vcl [link] (https://github.com/varnishcache/varnish-devicedetect/blob/master/devicedetect.vcl) –