第11回、
基本操作
varnishの基本的な操作は、
/etc/init.d/varnish start
/etc/init.d/varnish stop
varnishstat
varnishadm -T localhost:6082 -S /etc/varnish/secret
/usr/bin/varnishncsa -D -P /var/run/varnishncsa.pid -c -a -w/var/log/varnish/access.log
定義関係
varnishの定義関連は、
起動時に変更する項目
起動コマンドは、
/etc/init.d/varnish start
です。実際に起動する際に読まれるパラメータは/etc/
/etc/sysconfig/varnish
DAEMON_OPTS="-a :6081 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-u varnish -g varnish \
-S /etc/varnish/secret \
-s file,/var/lib/varnish/varnish_storage.bin,1G"
実サービスの利用を想定した場合、
キャッシュサイズに関しては、
キャッシュコントロールを行うためのVCL定義
いくつかサンプルを交えながら紹介します。定義体は/etc/
- backend default
- 後続サーバを定義します。
- director
- 対象のバックエンドサーバが複数あった場合の振舞いを定義します。
- acl clients
- アクセスコントロールを実施するべく、
対象IPを記載します。 - sub
- サブルーチンを記載します。よくvarnishの定義
(vcl) はC言語の記述に似ているといわれる部分になります。varnishをインストールし、 default. vclを開くと以下の9個のサブルーチンがコメントで記載されており、 それぞれの内容は以下の通りです (詳細はコメントやリファレンスを参照ください)。
sub vcl_ | メインルーチン |
sub vcl_ | 該当サーバ内のvarnishを通過する場合 |
sub vcl_ | キャッシュさせない場合 |
sub vcl_ | hashの生成 |
sub vcl_ | キャッシュが存在していた場合 |
sub vcl_ | キャッシュが存在しない場合 |
sub vcl_ | キャッシュにない場合、 |
sub vcl_ | コンテンツ送信時の処理 |
sub vcl_ | エラーが発生した場合 |
- 【例1】
親子関係の定義 - バックエンドサーバを172.
20. 1.1: 6081とし、 30ms以内の返答を期待する。
backend default {
.host = "172.20.1.1";
.port = "6081";
.connect_timeout = 30ms;
}
- 【例2】
URLからコンテンツ振り分け - リクエストURLがwww.
test. jpの場合、 キャッシュ有無の確認、 必要に応じてdefault定義に従ってbackendサーバへ接続する。それ以外のURLであった場合は、 「400 "Forbidden"」 を返信する。
# backend server
if (req.http.host == "www.test.jp") {
set req.backend = default;
}
else {
error 400 "Forbidden";
}
- 【例3】
特定キャッシュの時間変更 - リクエストURLがwww.
test. jp/ test/配下のコンテンツのみ、 キャッシュオブジェクトの保存時間を60sとする。
if(req.url ~ "www.test.jp/test/") {
set obj.http.cache-control = "max-age = 60";
set obj.ttl = 60s;
}
管理画面からの操作(varnishadm)
varnishadm -T localhost:6082 -S /etc/varnish/secret
を入力する事で管理画面を呼び出すことができます。操作方法はコマンドベースの対話式で、
help 200 377 help [command] ping [timestamp] auth response quit banner status start stop stats vcl.load <configname> <filename> vcl.inline <configname> <quoted_VCLstring> vcl.use <configname> vcl.discard <configname> vcl.list vcl.show <configname> param.show [-l] [<param>] param.set <param> <value> purge.url <regexp> purge <field> <operator> <arg> [&& <field> <oper> <arg>]... purge.list
- 【例】
varnishadm管理モードからできること①:キャッシュ削除の方法 - 明示的にキャッシュデータを削除する場合は、
purgeコマンドを利用します。
purge.url hoge.jp 200 0
purge.list 200 58 0x2b9a7471d640 1290682098.382948 0 req.url ~ hoge.jp
- 【例】
varnishadm管理モードからできること②:設定の動的反映 - varnishを稼働させたままvcl定義を動的に変更する
(varnishadmからの動的反映方法)。
vcl.load defaultvcl /etc/varnish/default.vcl 200 13 VCL compiled. vcl.use defaultvcl 200 0
運用するにあたって
varnishはシンプルな構造より、
vclなどで定義できる宣言、
おわりに
いかがでしたでしょうか? 第11回、