{"id":68,"date":"2013-01-23T14:00:59","date_gmt":"2013-01-23T13:00:59","guid":{"rendered":"http:\/\/blog.jeremm.fr\/?p=68"},"modified":"2014-09-24T21:51:46","modified_gmt":"2014-09-24T19:51:46","slug":"varnish-default-vcl","status":"publish","type":"post","link":"https:\/\/blog.jeremm.fr\/?p=68","title":{"rendered":"Varnish : default vcl"},"content":{"rendered":"<p>Une configuration basique de varnish :<\/p>\n<pre lang=\"cpp\"># Backend par defaut\r\nbackend default {\r\n   .host = \"127.0.0.1\";\r\n   .port = \"81\";\r\n   .connect_timeout = 1s;\r\n   .first_byte_timeout = 30s;\r\n     .probe = {\r\n        .url = \"\/\";  # ou .request = \"GET \/ HTTP\/1.1\" \"Host: blog.jeremm.fr\" \"Connection: close\";\r\n        .timeout  = 15s;\r\n        .interval = 15s;\r\n        .window    = 5;\r\n        .threshold = 2;\r\n    }\r\n}\r\n\r\nsub vcl_recv {\r\n   set req.grace = 300s;\r\n   set req.backend = default ;\r\n   if (req.restarts == 0) {\r\n      if (req.http.x-forwarded-for) {\r\n          set req.http.X-Forwarded-For = req.http.X-Forwarded-For + \", \" + client.ip;\r\n      } else {\r\n          set req.http.X-Forwarded-For = client.ip;\r\n      }\r\n   }\r\n   if (req.request != \"GET\" &&\r\n      req.request != \"HEAD\" &&\r\n      req.request != \"PUT\" &&\r\n      req.request != \"POST\" &&\r\n      req.request != \"TRACE\" &&\r\n      req.request != \"OPTIONS\" &&\r\n      req.request != \"DELETE\") {\r\n        return (pipe);\r\n   }\r\n   if (req.request != \"GET\" && req.request != \"HEAD\") {\r\n       return (pass);\r\n   }\r\n   if (req.url ~ \"\\.(jpeg|jpg|png|gif|ico|swf|js|css|gz|rar|txt|bzip|pdf)(\\?.*|)$\" && req.url !~ \"^\/index.php?\") {\r\n       unset req.http.Cookie;\r\n       return (lookup);\r\n   }\r\n   if (req.http.Authorization) {\r\n       return (pass);\r\n   }\r\n   return (lookup);\r\n}\r\n\r\nsub vcl_hash {\r\n        hash_data(req.url);\r\n        if (req.http.host) {\r\n                hash_data(req.http.host);\r\n        } else {\r\n                hash_data(server.ip);\r\n        }\r\n        if (req.http.Cookie) {\r\n                hash_data(req.http.Cookie);\r\n        }\r\n        return(hash);\r\n}\r\nsub vcl_pass {\r\n        set req.http.X-marker = \"pass\" ;\r\n}\r\nsub vcl_fetch {\r\n        if ( ! beresp.http.Content-Encoding ~ \"gzip\" ) {\r\n                set beresp.do_gzip = true;\r\n        }\r\n        if (req.url ~ \"\\.(jpeg|jpg|png|gif|ico|swf|js|css|gz|rar|txt|bzip|pdf)$\") {\r\n                unset beresp.http.Set-Cookie;\r\n        }\r\n        if (beresp.ttl > 0s ) {\r\n                  if (beresp.status >= 300 && beresp.status <= 399) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 set beresp.ttl = 10m;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0   }\r\n  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (beresp.status >= 399) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 set beresp.ttl = 0s;\r\n\u00a0\u00a0  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n        }\r\n        if (beresp.status >= 399) {\r\n                unset beresp.http.Set-Cookie;\r\n        }\r\n        # Maximum 24h de cache\r\n        if (beresp.ttl > 86400s) {\r\n                set beresp.ttl = 86400s;\r\n        }\r\n        if (req.http.X-marker == \"pass\" ) {\r\n                unset req.http.X-marker;\r\n                set beresp.http.X-marker = \"pass\";\r\n                set beresp.ttl = 0s ;\r\n        }\r\n        if (beresp.ttl > 0s && beresp.http.Set-Cookie) {\r\n                set beresp.ttl = 0s ;\r\n        }\r\n}\r\n\r\nsub vcl_deliver {\r\n        if (obj.hits > 0){\r\n                set resp.http.X-Varnish-Cache = \"HIT\";\r\n        }else{\r\n                set resp.http.X-Varnish-Cache = \"MISS\";\r\n        }\r\n        if (resp.http.X-marker == \"pass\" ) {\r\n                remove resp.http.X-marker;\r\n                set resp.http.X-Varnish-Cache = \"PASS\";\r\n        }\r\n        remove resp.http.Via;\r\n        remove resp.http.X-Varnish;\r\n        remove resp.http.Server;\r\n        remove resp.http.X-Powered-By;\r\n }\r\n\r\nsub vcl_error {\r\n        if (obj.status >= 500 && req.restarts < 4) {\r\n                return (restart);\r\n        }\r\n}<\/pre>\n<p>Pour t\u00e9l\u00e9charger directement le fichier default.vcl :  <a href=\"http:\/\/blog.jeremm.fr\/default.vcl\" title=\"default.vcl\">default.vcl<\/a><\/p>\n<p>Pour les options de d\u00e9marrage : <a href=\"http:\/\/blog.jeremm.fr\/?p=294\" title=\"Configuration et optimisation du daemon Varnish\">Configuration et optimisation du daemon Varnish<\/a><\/p>\n<p>Maj 06\/03\/12 : ajout du X-marker pass<br \/>\nMaj 16\/04\/12 : ajout req.grace<br \/>\nMaj 19\/08\/12 : t\u00e9l\u00e9chargement du fichier default.vcl \/ don't hash Accept-Encoding<br \/>\nMaj 03\/09\/12 : unset set-cookie sur media, pas de unset cookie sur media commen\u00e7ant par \/index.php?, unset Set-cookie sur 404<br \/>\nMaj 23\/01\/13 : add set beresp.do_gzip = true ;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Une configuration basique de varnish : # Backend par defaut backend default { .host = \u00ab\u00a0127.0.0.1\u00a0\u00bb; .port = \u00ab\u00a081\u00a0\u00bb; .connect_timeout = 1s; .first_byte_timeout = 30s; .probe = { .url = \u00ab\u00a0\/\u00a0\u00bb; # ou .request = \u00ab\u00a0GET \/ HTTP\/1.1\u00a0\u00bb \u00ab\u00a0Host: blog.jeremm.fr\u00a0\u00bb \u00ab\u00a0Connection: close\u00a0\u00bb; .timeout = 15s; .interval = 15s; .window = 5; .threshold = 2; } <a href='https:\/\/blog.jeremm.fr\/?p=68' class='excerpt-more'>[&#8230;]<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[9,11],"_links":{"self":[{"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/posts\/68"}],"collection":[{"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=68"}],"version-history":[{"count":37,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/posts\/68\/revisions"}],"predecessor-version":[{"id":914,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/posts\/68\/revisions\/914"}],"wp:attachment":[{"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}