5月 312012
若干小ネタですが、こんな書き方もできるという例です。
先日のエントリ(Varnishを使う際に覚えておきたいデフォルトの罠)において、
Varnishはユーザの入力したVCLコードの後に、デフォルトのVCLコードを挿入すると紹介しました。
これはユーザーのVCLとデフォルトのVCLの組み合わせですが、
実はユーザのVCLを複数定義して連結することが可能です。
やり方は非常に簡単で、同じアクションを複数定義するだけです。
■VCL sub vcl_deliver{ set resp.http.a = "a"; } sub vcl_deliver{ set resp.http.a = resp.http.a + "b"; } sub vcl_deliver{ set resp.http.a = resp.http.a + "c"; } ■出力ヘッダ a: abc
上記のVCLは以下のように結合されVarnishで使用されます
sub vcl_deliver { {//ユーザの定義1 set resp.http.a = "a"; } {//ユーザの定義2 set resp.http.a = resp.http.a + "b"; } {//ユーザの定義3 set resp.http.a = resp.http.a + "c"; } {//デフォルト return (deliver); } }
因みに結合する際の順番は先に出てきたものからどんどん突っ込んでいく感じです。
実際のところどのように使えばいいかというと、includeと組み合わせて使うのが便利だと思います。
include"/etc/varnish/ext.vcl";
先頭や末尾にincludeで別処理を入れることで、本来の処理を邪魔せず
デバッグすることや、複数のサーバにまたがる共通処理などを記述することが可能です。
ちょっと小ネタですが役に立てばいいなぁとおもいます。
[…] をやらvcl_fetchなどを書いているとキリがありません。 そこでvclの各アクションを複数定義した際に読み込み順に実行される機能(参照) とincludeを利用し、できるだけ共通化しています。 […]