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で別処理を入れることで、本来の処理を邪魔せず
デバッグすることや、複数のサーバにまたがる共通処理などを記述することが可能です。

ちょっと小ネタですが役に立てばいいなぁとおもいます。


  One Response to “同じVCLアクション(vcl_recvなど)を複数定義する”

  1. […] をやらvcl_fetchなどを書いているとキリがありません。 そこでvclの各アクションを複数定義した際に読み込み順に実行される機能(参照) とincludeを利用し、できるだけ共通化しています。 […]

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)