{"id":82,"date":"2013-11-04T00:50:17","date_gmt":"2013-11-03T22:50:17","guid":{"rendered":"http:\/\/grenzdebiel.dyndns.org\/wordpress\/?p=82"},"modified":"2016-03-17T05:43:31","modified_gmt":"2016-03-17T03:43:31","slug":"varnish-webcache","status":"publish","type":"post","link":"https:\/\/blog.grenzdebiel.dynv6.net\/?p=82","title":{"rendered":"varnish &#8211; Webcache"},"content":{"rendered":"<p><strong>Varnish <\/strong>ist ein Webbeschleuniger welcher die Inhalte von einem Webserver entgegennimmt und an den Client ausgibt. Dabei werden die Seiten bzw. Daten im Speicher zwischengespeichert. Auf diese weise kann zus\u00e4tzlicher IO vermieden werden. Varnish ist stark Threadbasiert. F\u00fcr jede Anfrage wird ein Arbeitsthread gestartet bis die Grenze erreicht ist ab da an werden die Anfragen in die Warteschlange eingereiht. <!--more--> Die Konfiguration wird in einer eigenen Sprache der VCL geschrieben. Da das Paket von Debain f\u00fcr Raspbian\u00a0veraltet ist compiliere ich das aktuelle:<\/p>\n<pre class=\"lang:sh decode:true brush: bash; gutter: true\">mkdir -p \/source\/varnish-cache\r\naptitude install autotools-dev automake1.9 libtool autoconf libncurses-dev xsltproc groff-base libpcre3-dev pkg-config\r\ncd varnish-cache\r\ngit clone git:\/\/git.varnish-cache.org\/varnish-cache\r\nsh autogen.sh\r\nsh configure\r\nmake &amp;&amp; make install<\/pre>\n<p>Eine VCL_Configfile f\u00fcr Worpress:<\/p>\n<pre class=\"lang:c decode:true brush: c; gutter: true \">backend default {\r\n    .host = \"127.0.0.1\"; \r\n    .port = \"8080\";\r\n}\r\n\r\nsub vcl_recv {\r\n    if (req.restarts == 0) {\r\n        if (req.http.x-forwarded-for) {\r\n            set req.http.X-Forwarded-For =\r\n            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 == \"PURGE\") {\r\n        if ( client.ip != \"&lt;IP&gt;\") {\r\n            error 405 \"Not allowed.\";\r\n        }\r\n        return (lookup);\r\n    }\r\n    if (req.request != \"GET\" &amp;&amp;\r\n        req.request != \"HEAD\" &amp;&amp;\r\n        req.request != \"PUT\" &amp;&amp;\r\n        req.request != \"POST\" &amp;&amp;\r\n        req.request != \"TRACE\" &amp;&amp;\r\n        req.request != \"OPTIONS\" &amp;&amp;\r\n        req.request != \"DELETE\") {\r\n            return (pipe);\r\n    }\r\n    if (req.request != \"GET\" &amp;&amp; req.request != \"HEAD\") {\r\n        return (pass);\r\n    }\r\n    if (!(req.url ~ \"wp-(login|admin)\") &amp;&amp;\r\n        !(req.url ~ \"&amp;preview=true\" ) ) {\r\n        unset req.http.cookie;\r\n    }\r\n\r\n    if (req.http.Authorization || req.http.Cookie) {\r\n        return (pass);\r\n    }\r\n    return (lookup);\r\n}\r\n\r\nsub vcl_hit {\r\n    if (req.request == \"PURGE\") {\r\n        purge;\r\n        error 200 \"Purged.\";\r\n    }\r\n    return (deliver);\r\n}\r\n\r\nsub vcl_miss {\r\n    if (req.request == \"PURGE\") {\r\n        purge;\r\n        error 200 \"Purged.\";\r\n    }\r\n    return (fetch);\r\n}\r\n\r\nsub vcl_fetch {\r\n    if (!(req.url ~ \"wp-(login|admin)\")) {\r\n        unset beresp.http.set-cookie;\r\n        set beresp.ttl = 96h;\r\n    }\r\n\r\n    if (beresp.ttl &lt;= 0s ||\r\n        beresp.http.Set-Cookie ||\r\n        beresp.http.Vary == \"*\") {\r\n            set beresp.ttl = 120 s;\r\n            return (hit_for_pass);\r\n    }\r\n    return (deliver);\r\n}<\/pre>\n<p>Wenn noch nicht vorhanden f\u00fcgt folgende Zeilen in das init-Script des varnish-cahe ein:<br \/>\n<code># Open files (standard: 1024, zu wenig fuer varnish)<br \/>\nulimit -n ${NFILES:-131072}<br \/>\n# Maximum locked memory groesse fuer shared memory log<br \/>\nulimit -l ${MEMLOCK:-82000}<br \/>\n<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Varnish ist ein Webbeschleuniger welcher die Inhalte von einem Webserver entgegennimmt und an den Client ausgibt. Dabei werden die Seiten bzw. Daten im Speicher zwischengespeichert. Auf diese weise kann zus\u00e4tzlicher IO vermieden werden. Varnish ist stark Threadbasiert. F\u00fcr jede Anfrage wird ein Arbeitsthread gestartet bis die Grenze erreicht ist ab da an werden die Anfragen [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":170,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[125,8,19,124,50,52,51],"class_list":["post-82","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-pi","tag-proxy","tag-raspberry","tag-raspberry-pi-2","tag-reverse-proxy","tag-varnish","tag-web-accelerator","tag-webcache"],"_links":{"self":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts\/82","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=82"}],"version-history":[{"count":2,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts\/82\/revisions"}],"predecessor-version":[{"id":211,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts\/82\/revisions\/211"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/media\/170"}],"wp:attachment":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=82"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=82"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=82"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}