• Home
    • Cool Knowledge base
    • Light Knowledge base
    • Help Desk
    • OnePage Documentation
  • Services
    • Main Services
    • PPC Services
    • SEO Services
    • SMM Services
  • Docs
  • Blog
    • Affiliate
    • Ecommerce
    • Frontend
    • linux
      • nginx
    • PHP
      • Magento
      • wordpress
    • Python
    • SEO
    • Web
  • Forum
    • Forums
    • Forum Topics
    • Topic Details
    • Ask Question
  • Pages
  • Contact

Subscribe to Updates

Get the latest creative news from FooBar about art, design and business.

What's Hot

VideoJS – multiple source demo

2022-03-08

Add custom field to Woocommerce tab

2022-03-07

Surror Product Tabs for WooCommerce

2022-03-07
Facebook Twitter Instagram
  • 中文
  • English
Facebook Twitter Instagram Pinterest VKontakte
SEO & Website build tips SEO & Website build tips
  • Home
    • Cool Knowledge base
    • Light Knowledge base
    • Help Desk
    • OnePage Documentation
  • Services
    • Main Services
    • PPC Services
    • SEO Services
    • SMM Services
  • Docs
  • Blog
    • Affiliate
    • Ecommerce
    • Frontend
    • linux
      • nginx
    • PHP
      • Magento
      • wordpress
    • Python
    • SEO
    • Web
  • Forum
    • Forums
    • Forum Topics
    • Topic Details
    • Ask Question
  • Pages
  • Contact
SEO & Website build tips SEO & Website build tips
Home»Uncategorized»Varnish 4 VCL for Prestashop 1.6
Uncategorized

Varnish 4 VCL for Prestashop 1.6

OxfordBy Oxford2020-06-17No Comments6 Mins Read
Facebook Twitter Pinterest LinkedIn Tumblr Email
Share
Facebook Twitter LinkedIn Pinterest Email

Hi, Prestashop Community Members. I’ve been recently playing with Varnish 4 as an attempt to reduce my Prestashop 1.6 site’s loading time. So far so good, the loading time have now decreased to ~1.5s and decided to share my VCL with the community so that we can create a big-single VCL configuration file for Varnish 4  for performance, security and a high hit-rate with the feedback from the whole community.

 

Varnish 4 VCL for Prestashop v0.2 (Updated on May 06th, 2016):

 

#

# This is an example VCL file for Varnish.

#

# It does not do anything by default, delegating control to the

# builtin VCL. The builtin VCL is called when there is no explicit

# return statement.

#

# See the VCL chapters in the Users Guide at https://www.varnish-cache.org/docs/

# and http://varnish-cache.org/trac/wiki/VCLExamples for more examples.




# Marker to tell the VCL compiler that this VCL has been adapted to the

# new 4.0 format.

vcl 4.0;




# Default backend definition. Set this to point to your content server.

backend default {

    .host = "127.0.0.1";

    .port = "8080";

}




sub vcl_recv {

  # Only deal with "normal" types

  if (req.method != "GET" &&

      req.method != "HEAD" &&

      req.method != "PUT" &&

      req.method != "POST" &&

      req.method != "TRACE" &&

      req.method != "OPTIONS" &&

      req.method != "PATCH" &&

      req.method != "DELETE") {

    /* Non-RFC2616 or CONNECT which is weird. */

    return (pass);

  }

  # Only cache GET or HEAD requests. This makes sure the POST requests are always passed.

  if (req.method != "GET" && req.method != "HEAD") {

    return (pass);

  }

 # Some generic URL manipulation, useful for all templates that follow

  # First remove the Google Analytics added parameters, useless for our backend

  if (req.url ~ "(\?|&)(utm_source|utm_medium|utm_campaign|utm_content|gclid|cx|ie|cof|siteurl)=") {

    set req.url = regsuball(req.url, "&(utm_source|utm_medium|utm_campaign|utm_content|gclid|cx|ie|cof|siteurl)=([A-z0-9_\-\.%25]+)", "");

    set req.url = regsuball(req.url, "\?(utm_source|utm_medium|utm_campaign|utm_content|gclid|cx|ie|cof|siteurl)=([A-z0-9_\-\.%25]+)", "?");

    set req.url = regsub(req.url, "\?$", "");

  }




  # Strip a trailing ? if it exists

  if (req.url ~ "\?$") {

    set req.url = regsub(req.url, "\?$", "");

  }




  # Strip hash, server doesn't need it.

  if (req.url ~ "\#") {

    set req.url = regsub(req.url, "\#.*$", "");

  }




if (req.http.Accept-Encoding) {

    # Do no compress compressed files...

    if (req.url ~ "\.(jpg|png|gif|woff2|gz|tgz|bz2|tbz)$") {

          unset 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 {

      unset req.http.Accept-Encoding;

    }

  }

# Remove the "has_js" cookie

  set req.http.Cookie = regsuball(req.http.Cookie, "has_js=[^;]+(; )?", "");




  # Remove any Google Analytics based cookies

  set req.http.Cookie = regsuball(req.http.Cookie, "__utm.=[^;]+(; )?", "");

  set req.http.Cookie = regsuball(req.http.Cookie, "_ga=[^;]+(; )?", "");

  set req.http.Cookie = regsuball(req.http.Cookie, "_gat=[^;]+(; )?", "");

  set req.http.Cookie = regsuball(req.http.Cookie, "utmctr=[^;]+(; )?", "");

  set req.http.Cookie = regsuball(req.http.Cookie, "utmcmd.=[^;]+(; )?", "");

  set req.http.Cookie = regsuball(req.http.Cookie, "utmccn.=[^;]+(; )?", "");




  # Remove DoubleClick offensive cookies

  set req.http.Cookie = regsuball(req.http.Cookie, "__gads=[^;]+(; )?", "");




  # Remove the Quant Capital cookies (added by some plugin, all __qca)

  set req.http.Cookie = regsuball(req.http.Cookie, "__qc.=[^;]+(; )?", "");




  # Remove the AddThis cookies

  set req.http.Cookie = regsuball(req.http.Cookie, "__atuv.=[^;]+(; )?", "");




  # Remove a ";" prefix in the cookie if present

  set req.http.Cookie = regsuball(req.http.Cookie, "^;\s*", "");




  # Are there cookies left with only spaces or that are empty?

  if (req.http.cookie ~ "^\s*$") {

    unset req.http.cookie;

}




#we should not cache any page for sales

if (req.method == "GET" && (req.url ~ "^/cart.php" || req.url ~ "^/order.php")) {

    return (pass);

}

#we should not cache any page for sales

if (req.method == "GET" && (req.url ~ "^/addresses.php" || req.url ~ "^/order-detail.php")) {

    return (pass);

}

#we should not cache any page for sales

if (req.method == "GET" && (req.url ~ "^/order-confirmation.php" || req.url ~ "^/order-return.php")) {

    return (pass);

}

if (req.url ~ "^[^?]*\.(css|js|jpg|png|gif|woff|woff2)(\?.*)?$") {

    unset req.http.Cookie;

  }

if (req.http.Authorization || req.http.Authenticate)

{

  return (pass);

}

}




sub vcl_backend_response {

# Avoid Header Expires in the past

if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) {

    unset beresp.http.set-cookie;

    unset beresp.http.Expires;

    set beresp.ttl = 24h;

    unset beresp.http.Cache-Control;

    # Set new Cache-Control headers for browsers to store cache for 7 days

    set beresp.http.Cache-Control = "public, max-age=604800";

    set beresp.http.magicmarker = "1";

    set beresp.http.cachable = "1";

        if (bereq.url !~ "\.(css|js|jpg|png|gif|woff|woff2|html|htm|gz)(\?|$)") {

            set beresp.http.Pragma = "no-cache";

            set beresp.http.Expires = "-1";

            set beresp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";

            set beresp.grace = 1m;

        }

        return(deliver);

        }

  # Sometimes, a 301 or 302 redirect formed via Apache's mod_rewrite can mess with the HTTP port that is being passed along.

  # This often happens with simple rewrite rules in a scenario where Varnish runs on :80 and Apache on :8080 on the same box.

  # A redirect can then often redirect the end-user to a URL on :8080, where it should be :80.

  # This may need finetuning on your setup.

  #

  # To prevent accidental replace, we only filter the 301/302 redirects for now.

  if (beresp.status == 301 || beresp.status == 302) {

    set beresp.http.Location = regsub(beresp.http.Location, ":[0-9]+", "");

  }




  # Don't cache 50x responses

  if (beresp.status == 500 || beresp.status == 502 || beresp.status == 503 || beresp.status == 504) {

    return (abandon);

  }




  # Allow stale content, in case the backend goes down.

  # make Varnish keep all objects for 1 hour beyond their TTL

  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";

  }

  # Remove some headers: PHP version

  unset resp.http.X-Powered-By;

  # Remove some headers: Apache version & OS

  unset resp.http.Server;

  # Remove some heanders: Varnish

  unset resp.http.Via;

  unset resp.http.X-Varnish;

}

Edited May 6, 2016 by moy2010 (see edit history)

https://www.prestashop.com/forums/topic/525145-varnish-4-vcl-for-prestashop-16/

Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
Avatar photo
Oxford

Related Posts

nginx multi sub domain proxy

2021-06-05

How TO – Position Text Over an Image

2021-05-24

bootstrapstudio.io

2021-03-25

how to get wordpress theme getmetrix and google speed insight 100 scores?

2021-03-12
Recent Posts
  • VideoJS – multiple source demo
  • Add custom field to Woocommerce tab
  • Surror Product Tabs for WooCommerce
  • How To Scrape Amazon at Scale With Python Scrapy, And Never Get Banned
  • Compile a Jekyll project without installing Jekyll or Ruby by using Docker
June 2020
M T W T F S S
1234567
891011121314
15161718192021
22232425262728
2930  
« May   Jul »
Tags
app branding culture design digital Docly docs etc faq fashion featured fitness fix github Helpdesk Image issue leisure lifestyle magento Manual marketing memecached Photography picks planing seo sequrity tips Travel trending ui/ux web WordPress 爬虫
Editors Picks

Fujifilm’s 102-Megapixel Camera is the Size of a Typical DSLR

2021-01-05
Top Reviews
8.9

Which LED Lights for Nail Salon Safe? Comparison of Major Brands

By Oxford
8.9

Review: Xiaomi’s New Loudspeakers for Hi-fi and Home Cinema Systems

By Oxford
70

CES 2021 Highlights: 79 Top Photos, Products, and Much More

By Oxford
Advertisement
Demo
  • Facebook
  • Twitter
  • Instagram
  • Pinterest
About Us
About Us

Your source for the lifestyle news. This demo is crafted specifically to exhibit the use of the theme as a lifestyle site. Visit our main page for more demos.

We're accepting new partnerships right now.

Email Us: [email protected]
Contact: +1-320-0123-451

Facebook Twitter Instagram Pinterest YouTube LinkedIn
Recent Posts
  • VideoJS – multiple source demo
  • Add custom field to Woocommerce tab
  • Surror Product Tabs for WooCommerce
  • How To Scrape Amazon at Scale With Python Scrapy, And Never Get Banned
  • Compile a Jekyll project without installing Jekyll or Ruby by using Docker
From Flickr
Ascend
terns
casual
riders on the storm
chairman
mood
monument
liquid cancer
blue
basement
ditch
stars
© 2025 Designed by 九号资源网.

Type above and press Enter to search. Press Esc to cancel.