varnish cacheã§ã³ã³ãã³ãã®ãã£ãã·ã¥
varnish cache
ãªãã¼ã¹ãããã·å°ç¨ãµã¼ãããã£ãã·ã¥ã«ã¼ã«ãç´°ããè¨å®ã§ããã®ã§ãè²ã 使ãããã ãåå¼·ãã¦ãéãã§ã¿ãã
- http://varnish-cache.org/wiki/Introduction
- http://varnish-cache.org/docs/
- http://d.hatena.ne.jp/keita_yamaguchi/20080107/1199697651
- http://dann.g.hatena.ne.jp/dann/20090628/p1
ãããã¯ãç°å¢ã§ä½¿ã£ã¦ãªãã¦ãbackendã¯ãã¹ãç¨ã®apacheãªã®ã§è©³ç´°ãªãã¨ã¯ããã£ã¦ãªããã©ãã¾ãã¾ãé¢ç½ãã
install
ubuntuã¨ããªãaptã§å ¥ãããã¹ããµã¼ããå¤ãfedora coreã ã£ããããã£ãããªã®ã§sourceã§å ¥ãã¦ã¿ãã
$ wget http://sourceforge.net/projects/varnish/files/varnish/2.1.2/varnish-2.1.2.tar.gz/download $ tar zxvf varnish-2.1.2.tar.gz $ cd varnish-2.1.2 $ ./configure && make $ su # make install ### initãsysconfig ãã¡ã¤ã«ã³ãã¼ # cd redhat # cp varnish.sysconfig /etc/sysconfig/varnish # cp varnish.initrc /etc/init.d/varnish ### logåºåç¨daemonã®initãã¡ã¤ã«ã³ãã¼: å¾è¿° # cp varnishlog.initrc /etc/init.d/varnishlog # cp varnishncsa.initrc /etc/init.d/varnishncsa
èµ·å
åä¸ã®backendãã¹ãã«ä¸¸æãããã ããªãconfigãããã
# varnishd -a :80 -b localhost:8080 -T localhost:6082 -f default.vcl
status確èª
ä»å±ã®varnishstat, varnishtopã³ãã³ãã§ãä»ã«ã¯ç®¡çãã¼ãã«telnetãã¦statsã¨ãstatusãè¦ã¦ã¿ãã
log確èª
varnishdãèµ·åããã ãã§ã¯ãã°åºã¦ããªãã¦ãå¥ã®ããã»ã¹ã§åã模æ§ã
varnishncsa
varnishncsaãèµ·åãã¦ããã¨Apache / NCSAã® combinedã®formatã®ãã°ãåå¾ã§ããããã°è§£æããããå ´åãªã©ã«ã¯å¿
è¦ããªãããã©ã«ãã¯æ¨æºåºåã«åºãã
option
- -D
daemonã§èµ·åã
- -a
logãä¸æ¸ãããã«è¿½å ããã
- -f
logã«åºåããclientã®IPã¢ãã¬ã¹ããX-Forwarded-Forãããã®å¤ã§ä¸æ¸ãããã
=> varnishã®åã«ãªãã¼ã¹ãããã·ããã¦ãå ´åãªã©ã«ä½¿ãï¼
- -w
logfileãæå®ãvarnishncsaã¯SIGHUPã·ã°ãã«ãåããã¨ãlogfileãéãç´ãã
=> log rotateã®æã«ä½¿ã
varnishlog
varnishlogãèµ·åãã¦ããã¨ãã¢ã¯ã»ã¹ããã度ã«ãã°ãæµããããã®ãã°ã¯varnishç¨ãã¤ããªå½¢å¼ï¼ãªãã·ã§ã³ã¯varnishncsaã¨ã»ã¼åããdaemonã§èµ·åããå ´åã¯sampleã®initã¹ã¯ãªãããªã©ã§ã
varnishã®å
±æã¡ã¢ãªããä¸æçã«èªãå ´åã¯ãä½ããªãã·ã§ã³ã¤ããã«varnishlog ãå®è¡ããã¡ã¤ã«ã«ä¿åããå ´åã¯-a -w filename -D ãªã©ã§ã(-a : append -D : daemonize)ãä¿åãããã¡ã¤ã«ããèªãå ´å㯠varnishlog -r filename (ããã¹ãå½¢å¼ã§ã¯ãªãã®ã§ãcat ãªã©ã§ã¯èªããªã)ã
varnish cache ã®è¨å®ãã¡ã¤ã«
vclã¨ããæ¸å¼ãçµæ§ããããããã
æ§æã®ãã§ãã¯
apachectl configtest ã¿ãããªæ§æããã§ãã¯ããã³ãã³ãèªä½ã¯ãªãã£ã½ãããã ãvarnishd -C ã§vclè¨èªãCè¨èªã«å¤æããã³ã¼ãã表示ãããªãã·ã§ã³ãããã®ã§ãããã使ã£ã¦
$ varnishd -C -f /path/to/default.vcl
ã¨ãããã°ãããvclã«ééããããã°ããã®ã³ãã³ãå®è¡æã«ã¨ã©ã¼ã«ãªãã
syntax
- backend
backendã®app serverã¨ããè¨è¿°ã
- director
è¤æ°ã®backendã1ã¤ã®ã°ã«ã¼ãã«è¨å®ã
æªä½¿ç¨ã®backend, director ãããã ãã§ã¨ã©ã¼ã«ãªãã®ã§æ³¨æã
- action
- pass
cacheããªãã§ãbackendãµã¼ãã«èãã«ãã
-
- lookup
vcl_recvã§ãcacheãåç
§ãã¦è¿ãã
- vcl_recv sub routine
cilentãããªã¯ã¨ã¹ããåããã¨ãã«èµ°ãå¦çãHTTPã¡ã½ããã¨ããurlã«ããå¤å¥ã¨ãã
- vcl_fetch sub routine
backendãµã¼ããããªã¯ã¨ã¹ããåãåã£ãå¾ã«èµ°ãå¦çã
- vcl_hash sub routine
ãã£ãã·ã¥ã®ããã·ã¥å¤ãä½ãå ã«è¨ç®ããããããã©ã«ãã¯URLãuser-agentã追å ãããã¨ãã¯
sub vcl_hash { req.hash += req.url; req.hash += req.http.User-Agent; # ãããè¿½è¨ }
ã¿ããã«ã
å¤æ°
- req
request object
- beresp
backend respons object
- obj
cache object
tips
ã¦ããã»ã©å¤§ãããã¨è©¦ãã¦ãªããã©ã
ç¹å®URLã®TTLãå¤æ´
ç»åã¨ãã®TTL(Age ãããã®ä¸é) ãé·ããã
sub vcl_fetch { if ( req.url ~ "\.(png|gif|jpg)$" ) { unset beresp.http.set-cookie; set beresp.ttl = 3600s; } }
virtual host ã®è¨å®ä¾
backend 㧠appãµã¼ããå®ç¾©ãã¦ãvcl_recv å ã§hostããããè¦ã¦æ¯ãåããå¦çãæ¸ããbackend ãµã¼ããnamebaseã®virtualhostè¨å®ã®å ´åã¯set req.http.host ã§hostããããæå®ãã¦ãªãã¨ãã¡(ãªã¯ã)ã
backend www { .host = "192.168.0.1"; .port = "80"; } backend images { .host = "192.168.0.2"; .port = "80"; } sub vcl_recv { if (req.http.host ~ "^(www.)?example.com$") { set req.http.host = "www.example.com"; set req.backend = www; } elsif (req.http.host ~ "^images.example.com$") { set req.http.host = "images.example.com"; set req.backend = images; } else { error 404 "Unknown virtual host"; } }