{"id":188,"date":"2013-02-07T20:06:18","date_gmt":"2013-02-07T19:06:18","guid":{"rendered":"http:\/\/blog.jeremm.fr\/?p=188"},"modified":"2014-09-24T19:56:29","modified_gmt":"2014-09-24T17:56:29","slug":"esi-et-varnish","status":"publish","type":"post","link":"https:\/\/blog.jeremm.fr\/?p=188","title":{"rendered":"ESI et Varnish"},"content":{"rendered":"<p>L&rsquo;ESI (Edge Side Includes) est support\u00e9 par Varnish. C&rsquo;est un language de balisage HTML permettant d&rsquo;assembler une page dynamique.<br \/>\nCela permet de cacher avec diff\u00e9rents temps en cache ou de ne pas cacher, diff\u00e9rents bloc d&rsquo;une page.<br \/>\nPar exemple :<br \/>\n<a href=\"http:\/\/blog.jeremm.fr\/wp-content\/uploads\/2013\/02\/ESI.png\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-663 aligncenter\" alt=\"ESI\" src=\"http:\/\/blog.jeremm.fr\/wp-content\/uploads\/2013\/02\/ESI-300x228.png\" width=\"300\" height=\"228\" srcset=\"https:\/\/blog.jeremm.fr\/wp-content\/uploads\/2013\/02\/ESI-300x228.png 300w, https:\/\/blog.jeremm.fr\/wp-content\/uploads\/2013\/02\/ESI.png 480w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nOn peut d\u00e9finir le temps de cache avec le header \u00ab\u00a0Cache-Control : max-age\u00a0\u00bb ou directement dans la configuration varnish.<br \/>\nVoici une page d&rsquo;exemple :<br \/>\n&#8211; index.php :<\/p>\n<pre lang=\"html5\"><?php\r\n        header('Cache-Control: max-age=3600');\r\n?>\r\n<title>Page de test ESI<\/title>\r\n<html><body>\r\n        Cette page est cach&eacute;e pourtant j'arrive &agrave; afficher l'heure :\r\n        <esi:include src=\"\/dyn\/date.php\"\/>\r\n<\/body><\/html><\/pre>\n<p>&#8211; date.php :<\/p>\n<pre lang=\"php\"><?php\r\n        header('Cache-Control: max-age=0');\r\n        echo date('Y-m-d H:i:s');\r\n?><\/pre>\n<p>Il faut activer l&rsquo;ESI dans la configuration varnish :<\/p>\n<pre lang=\"cpp\">sub vcl_fetch {\r\n        set beresp.do_esi = true;\r\n<\/pre>\n<p>Si vous avez un panier, il faut pouvoir identifier les utilisateurs avec une session php.<br \/>\nSi il y a une session php, elle ne peut pas \u00eatre d\u00e9finit par la page cach\u00e9e : il faudra donc la g\u00e9n\u00e9rer autrement :<\/p>\n<pre lang=\"html5\"><script type='text\/javascript' src=\"\/dyn\/sessions.php\"><\/script><\/pre>\n<p>&#8211; sessions.php :<\/p>\n<pre lang=\"php\"><?php\r\n        session_start();\r\n?><\/pre>\n<p>Pour que tous les utilisateurs re\u00e7oivent la page commune cach\u00e9e et qu&rsquo;elle reste dynamique en fonction des utilisateurs il faut enlever la session des cookies pour les pages\/parties communes et la laisser pour les pages\/parties individuelles.<br \/>\nDans la configuration varnish :<\/p>\n<pre lang=\"cpp\">if ( ! req.url ~ \"^\/dyn\" ) {\r\n        set req.http.Cookie = regsuball(req.http.Cookie, \"PHPSESSID=[^;]+(; )?\", \"\");\r\n        if (req.http.Cookie ~ \"^$\") {\r\n            unset req.http.Cookie;\r\n        }<\/pre>\n<p>On peut tester avec cette page :<br \/>\n&#8211; index.php :<\/p>\n<pre lang=\"html5\"><?php\r\n        header('Cache-Control: max-age=3600');\r\n?>\r\n<title>Page de test ESI<\/title>\r\n<html><body>\r\n        Cette page est cach&eacute;e pourtant j'arrive &agrave; afficher l'heure :\r\n        <esi:include src=\"\/dyn\/date.php\"\/>\r\n        <br>Ainsi que l'ID de session : <esi:include src=\"\/dyn\/phpsess.php\"\/>\r\n        <script type='text\/javascript' src=\"\/dyn\/sessions.php\"><\/script>\r\n<\/body><\/html><\/pre>\n<p>&#8211; phpsess.php :<\/p>\n<pre lang=\"php\"><?php\r\n        header('Cache-Control: max-age=0');\r\n        echo $_COOKIE[\"PHPSESSID\"];\r\n?><\/pre>\n<p>Le r\u00e9sultat : <a href=\"http:\/\/blog.jeremm.fr\/esi\/\" title=\"http:\/\/blog.jeremm.fr\/esi\/\" target=\"_blank\">http:\/\/blog.jeremm.fr\/esi\/<\/a><br \/>\nA la premi\u00e8re visite vous n&rsquo;avez pas de session, elle ne sera donc pas affich\u00e9e.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>L&rsquo;ESI (Edge Side Includes) est support\u00e9 par Varnish. C&rsquo;est un language de balisage HTML permettant d&rsquo;assembler une page dynamique. Cela permet de cacher avec diff\u00e9rents temps en cache ou de ne pas cacher, diff\u00e9rents bloc d&rsquo;une page. Par exemple : On peut d\u00e9finir le temps de cache avec le header \u00ab\u00a0Cache-Control : max-age\u00a0\u00bb ou directement <a href='https:\/\/blog.jeremm.fr\/?p=188' 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":[35,67,73,36,9],"_links":{"self":[{"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/posts\/188"}],"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=188"}],"version-history":[{"count":34,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/posts\/188\/revisions"}],"predecessor-version":[{"id":876,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/posts\/188\/revisions\/876"}],"wp:attachment":[{"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=188"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=188"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}