Web Summer Camp, September 1st, 2017
apt-get install varnish
apt-get install varnish
/etc/default/varnish
, replace port 6081 by port 80service apache2 restart service varnish restart
httpstatusdogs.com
GET /path HTTP/1.1 200 OK Content-Type: text/html <html>...</html>
twitter.com/stevelosh/status/372740571749572610
wget -Sq --spider ezvarnish.websc/solutions/expiration.php curl -o /dev/null -sD - ezvarnish.websc/solutions/expiration.php
HTTP 1.1, RFC 2616, Sections 13.2 and 13.3
Cache-Control: s-maxage=3600, max-age=900 Expires: Thu, 15 May 2014 08:00:00 GMT
cd /var/www/html/summercamp/ezvarnish git pull sudo ./installation/enable-varnish.sh
curl -sD - ezvarnish.websc/noinfo.php curl -sD - ezvarnish.websc/exercises/expiration.php
ETag: 82901821233
If-None-Match: 82901821233 304 Not Modified
curl -sD - ezvarnish.websc/exercises/etag.php curl -H "If-None-Match: abc" -sD - ezvarnish.websc/exercises/etag.php
Last-Modified: Tue, 13 May 2014 08:13:20 GMT
If-Modified-Since: Tue, 13 May 2014 08:13:20 GMT 304 Not Modified
curl -sD - ezvarnish.websc/exercises/last-modified.php curl -H "If-Modified-Since: {previous timestamp}" -sD - ezvarnish.websc/exercises/last-modified.php
gmdate('r')
does not work as timezone is output as "+0000" instead of "GMT".Cache-Control: s-maxage=0, private, no-cache
www.varnish-cache.org/trac/browser/bin/varnishd/default.vcl?rev=3.0 (Varnish 3)
www.varnish-cache.org/trac/browser/bin/varnishd/builtin.vcl?rev=4.0 (Varnish 4)
curl -sD - ezvarnish.websc/exercises/nocache.php
curl -sD - ezvarnish.websc/cookie.php curl -H "Cookie: x" -sD - ezvarnish.websc/solutions/expiration.php
GET /resource Accept: application/json
GET /resource Accept: text/xml
Vary: Accept
curl -sD - ezvarnish.websc/exercises/content-negotiation.php curl -H "Accept: application/json" -sD - ezvarnish.websc/exercises/content-negotiation.php
# app/config/config.yml fos_http_cache: cache_control: rules: # only match login.example.com - match: host: ^login.example.com$ headers: cache_control: { s_maxage: 0 } vary: [Accept-Encoding, Accept-Language]
# match all actions of a specific controller - match: attributes: _controller: ^AcmeBundle:Default:.* headers: cache_control: public: true max_age: 15 s_maxage: 30 last_modified: "-1 hour"
Think carefully and test thoroughly
sub vcl_backend_response { set beresp.http.X-TTL = beresp.ttl; } sub vcl_deliver { if (obj.hits > 0) { set resp.http.X-Cache = "HIT"; } else { set resp.http.X-Cache = "MISS"; } }
backend default { .host = "127.0.0.1"; .port = "8888"; } backend legacy { .host = "127.0.0.1"; .port = "8888"; } sub vcl_recv { if (req.url ~ "^/archive/") { set req.backend_hint = legacy; } else { set req.backend_hint = default; } }
sub vcl_recv { if (req.http.Cookie) { if (req.url ~ "^/cache") { remove req.http.Cookie; } } }
curl -H "Cookie: x" -sD - ezvarnish.websc/solutions/expiration.php
sub vcl_recv { set req.http.cookie = ";" + req.http.cookie; set req.http.cookie = regsuball(req.http.cookie, "; +", ";"); set req.http.cookie = regsuball(req.http.cookie, ";(PHPSESSID)=", "; \1="); set req.http.cookie = regsuball(req.http.cookie, ";[^ ][^;]*", ""); set req.http.cookie = regsuball(req.http.cookie, "^[; ]+|[; ]+$", ""); if (req.http.Cookie == "") { remove req.http.Cookie; } }
varnish-cache.org/trac/wiki/VCLExampleRemovingSomeCookies #RemovingallBUTsomecookies
Group based caching
# config/varnish/common.vcl include "fos_custom_ttl.vcl"; include "user_context.vcl";
sudo service varnish restartezvarnish.websc/user-context/ (with your browser)
cd /var/www/html/summercamp/ezvarnish sudo ./installation/disable-varnish.sh