vcl 4.0; import std; backend default { .host = "127.0.0.1"; .port = "8080"; #.connect_timeout = 300s; #.first_byte_timeout = 300s; #.between_bytes_timeout = 300s; #.max_connections = 1024; } backend mobile { .host = "127.0.0.1"; .port = "8081"; #.connect_timeout = 300s; #.first_byte_timeout = 300s; #.between_bytes_timeout = 300s; #.max_connections = 1024; } backend default2 { .host = "127.0.0.1"; .port = "8080"; #.connect_timeout = 300s; #.first_byte_timeout = 300s; #.between_bytes_timeout = 300s; #.max_connections = 1024; } acl purge { "::1"; "localhost"; "127.0.0.1"; "3.23.28.101"; } sub vcl_recv { set req.http.X-UA-Device = "desktop"; #set req.url = "/tablet" req.url; if (req.http.User-Agent ~ "(?i)ip(hone|od)") { set req.backend_hint = mobile; } elsif (req.http.User-Agent ~ "(?i)android.*(mobile|mini)") { set req.backend_hint = mobile; } elsif (req.http.User-Agent ~ "(?i)tizen.*mobile") { set req.backend_hint = mobile; } if (req.http.User-Agent ~ "(?i)ip(hone|od)") { set req.http.X-UA-Device = "mobile"; } elsif (req.http.User-Agent ~ "(?i)android.*(mobile|mini)") { set req.http.X-UA-Device = "mobile"; } elsif (req.http.User-Agent ~ "(?i)tizen.*mobile") { set req.http.X-UA-Device = "mobile"; } if ( req.http.User-Agent ~ "(?i)(ads|google|bing|msn|yandex|baidu|ro|career|seznam|)bot" ) { set req.http.X-UA-Device = "bot"; } if (req.http.host ~ "(?i)^(www.)?example.tld$") { set req.backend_hint = default2; } unset req.http.proxy; set req.http.host = regsub(req.http.Host, ":[0-9]+", ""); if (req.method == "PURGE") { if (!client.ip ~ purge) { return(synth(405,"Not allowed.")); } if (req.http.X-Purge-Method) { if (req.http.X-Purge-Method == "regex") { ban("req.http.host == " + req.http.host + " && req.url ~ " + req.url); } else { ban("req.http.host == " + req.http.host + " && req.url == " + req.url); } } return (purge); } if (req.method != "GET") { return(pipe); } #if (req.http.cookie ~ "(joomla_[a-zA-Z0-9_]+|wordpress_no_cache|wordpress_logged|userID|wordpress_(?!test_)[a-zA-Z0-9_]+|wp-postpass|comment_author_[a-zA-Z0-9_]+|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_[a-zA-Z0-9]+|sid_customer_|sid_admin_|wordpressuser_|wp-postpass_|wordpress_logged_in_|PrestaShop-[a-zA-Z0-9]+)"){ return(pipe); } #if (req.url ~ "(/feed/|/xmlrpc.php|/administrator|/WordPress-Base-Secret/|wp-.*.php|sitemap(_index)?.xml|/phpmyadmin|/roundcube|/roundcubemail|/accesopriv|/correoweb|/accesodbpma|/acceder|/mi-cuenta|/micuenta|com_user|com_users|com_contact|com_mailto|/component/user|/component/users|/component/contact|/component/mailto|/wp-admin|/wp-login.php|/cart|/my-account|/checkout|/wc-api|/addons|/lost-password|\?add-to-cart=|\?wc-api=|/ucp.php|/login|/logout|/connect|/signin|/signup|/register)") { return (pipe); } #if (req.url ~ "^/example.php") { return (pipe); } if (req.url ~ "^/.well-known/acme-challenge/") { return(pipe); } #if (req.url ~ "^/wp-admin/admin-ajax.php") { return (synth(405)); } unset req.http.Cookie; return(hash); } sub vcl_backend_response { unset beresp.http.set-cookie; set beresp.ttl = 1h; if ((bereq.url ~ "^(/|/index\.)?$")) { set beresp.ttl = 30m; } unset beresp.http.Vary; unset beresp.http.Cache-Control; unset beresp.http.age; if (beresp.status == 500 || beresp.status == 502 || beresp.status == 504) { return (retry); } if (bereq.url ~ "\.(gif|jpg|jpeg|swf|ttf|css|js|pdf|ico|png|torrent|vtt|srt)(\?.*|)$") { set beresp.ttl = 1h; } if (beresp.status == 301 || beresp.status == 302) { set beresp.http.Location = regsub(beresp.http.Location, ":[0-9]+", ""); } if (beresp.status == 404) { set beresp.uncacheable = false; unset beresp.http.set-cookie; set beresp.ttl = 30m; return (deliver); } #if (bereq.http.cookie ~ "(joomla_[a-zA-Z0-9_]+|wordpress_no_cache|wordpress_logged|userID|wordpress_(?!test_)[a-zA-Z0-9_]+|wp-postpass|comment_author_[a-zA-Z0-9_]+|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_[a-zA-Z0-9]+|sid_customer_|sid_admin_|wordpressuser_|wp-postpass_|wordpress_logged_in_|PrestaShop-[a-zA-Z0-9]+)"){ set beresp.uncacheable = true; return (deliver); } set beresp.grace = 1h; return (deliver); } sub vcl_deliver { if (obj.hits > 0) { set resp.http.X-Cache = "HIT"; } else { set resp.http.X-Cache = "MISS"; } set resp.http.X-Cache-Hits = obj.hits; unset resp.http.WP-Super-Cache; unset resp.http.X-Turbo-Charged-By; unset resp.http.Server; unset resp.http.X-Powered-By; unset resp.http.X-Varnish; unset resp.http.Via; unset resp.http.Link; } sub vcl_hash { if (req.http.X-UA-Device) { hash_data(req.http.X-UA-Device); } }