5月 152011
3.0beta1では結構VCLの記法が変更されています。
追加要素はまた別記事で書こうと思いますが下位互換性のない変更が結構ありますので纏めてみました。
一応網羅してるんじゃないかと思うのですが抜けがあったら教えてもらえるとありがたいです。
ESI処理を行う際の指定方法
今まではesi;でしたがberesp.do_esi=true;に変わりました。
2.1.X
sub vcl_fetch { if (req.url == "/test.html") { esi; /* ESI処理を行う */ set obj.ttl = 24 h; /* キャッシュ保持時間を設定(24時間) */ } elseif (req.url == "/cgi-bin/date.cgi") { set obj.ttl = 1m; /* includeするHTMLのキャッシュ保持時間を設定(1分) */ } }
3.0
sub vcl_fetch { if (req.url == "/test.html") { set beresp.do_esi = true; /* ESI処理を行う */ set obj.ttl = 24 h; /* キャッシュ保持時間を設定(24時間) */ } elseif (req.url == "/cgi-bin/date.cgi") { set obj.ttl = 1m; /* includeするHTMLのキャッシュ保持時間を設定(1分) */ } }
obj.cacheable,beresp.cacheableが廃止されました
キャッシュ可能かの判定はberesp.ttlとberesp.graceでのみ判定されます。
vcl_fetch内でのreturn(pass)がreturn(hit_for_pass)に変更されました
vcl_recvとvcl_fetchのpass動作が厳密には違うため名前を変更されました。
vcl_recvの方は変わってません。
2.1.X
sub vcl_fetch { return(pass); }
3.0
sub vcl_fetch { return(hit_for_pass); }
hashの指定の仕方が変わりました
hash_data(value)に変わりました。
2.1.X
req.hash += value;
3.0
hash_data(value);
文字列の結合の仕方が変わりました
結合に+を利用するようになりました。
2.1.X
req.url"AAA"
3.0
req.url+"AAA"
logメソッドがデフォルトで使えなくなりました
Varnish Module(VMOD)のstdを利用する必要があります。
2.1.X
sub vcl_recv{ log req.url; }
3.0
import std; sub vcl_recv{ std.log(req.url); }
文字列中の%による文字列エスケープを解釈しなくなりました
2.1.X
入力 log "AAABBB:%67%67%67%67%67%67%67%67"; 出力 13 VCL_Log c AAABBB:gggggggg
3.0
入力 std.log("AAABBB:%67%67%67%67%67%67%67%67"); 出力 12 VCL_Log c AAABBB:%67%67%67%67%67%67%67%67
purge()がban()になりました
2.1.X
purge("req.http.host == " req.http.host "&& req.url == " req.url);
3.0
ban("req.http.host == " + req.http.host + "&& req.url == "+ req.url);
—
さすがメジャーバージョンアップというべきか結構変わってますね・・・