【squid】 2.4.STABLE2 設定の巻 その1
( ´D`)ノ< キャッシュを有効に使うためには、溜め込んでいるキャッシュがまだ新鮮
だから、取りに行く必要はないよ、と教えてあげる必要があるのれす。
それをコントロールするのがrefresh_patternなのれすが、この説明が
日本語のまともな文書がなかったので、理解するまで時間がかかったのれす。
だから、ここにそれを書き留めておくのれす。
デフォルトでは次のようになっているのれす。
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
2列目がプロトコル名を含むファイル名なのれす。上の例ではftpとgopher
以外は3行目に全て当てはまるのれす。
3列目から5列目がそれぞれmin、percent、maxになっているのれす。
それぞれが分、パーセント、分になっているのれす。
ここで与えた条件とage、lm-factor、expiresと比べて、キャッシュが新しいか
古くて、取りに行く必要があるか、判断しているのれす。
で下のが判断式なのれす。
FRESH if expires < now, else STALE
STALE if age > max
FRESH if lm-factor < percent, else STALE
FRESH if age < min
else STALE
ageとはファイルをキャッシュしてから現在までの時間で、lm_ageがサーバ上
での最終更新時刻からキャッシュするまでの時間とすると、ageをlm_ageで
割ったのがlm-factorになるのれす。
更新時 取得時 現在
|←lm_age→|←age→|
lm-factor=age/lm_age
squid】 2.4.STABLE2 設定の巻 その2
( ´D`)ノ< でまずageがmaxを越えていたら古いということで取りに行くのれす。
たとえばデフォルトの3行目ではキャッシュしてから4320分つまり3日以上
経ったファイルは無条件に取りに行くことになるのれす。
次にlm_factorとpercentが比べられるのれす。デフォルトでは20%なので
たとえば最終更新から1日経ってから取得したファイルであれば、その20%
つまり4.8時間過ぎたら古いと判断されるのれす。
この条件はmimやmaxのように決め打ちしていないので、頻繁に更新される
ニュースサイトと、あまり更新されないサイトとどちらでも有効な条件判断に
になるのれす。
最後にageとminを比べて、まだageがminで設定した時間に達していなければ
まだ新しいと判断されるのれす。しかし、デフォルトでは0となっているので
ここでは常に古いと判断されてしまうのれす。
最初のexpiresはサーバが返すファイルの有効期限が区切ってある場合
の設定なのれす。期限切れだと古いと判断されるのれす。
つまりキャッシュのヒット率を増やしたければ、minの値を大きく、percentも
大きくして、maxもなるべく大きくするようにすればいいのれす。
この他にオプションが4つあるのれす。
override-expireは有効期限の条件判断を強制的にminの判断にしてしまう。
override-lastmodは最終更新の判断を強制的にminの判断にしてしまう。
reload-into-imsはno-cacheとreloadの命令をIf-Modified-Sinceの
リクエストに変えてしまうもの。つまり無いのに、あるかのように装って差分だけ
送れと言うわけなのれす。
ignore-reloadはno-cacheやreloadの命令そのものを無視しちゃうもの
なのれす、たぶん。間違ってたら訂正してちょ。
このオプションはHTTP/1.1に違反しているそうなのれすが、逆に強制的に
何度も再読み込みさせるwebサイトの作者の商売気をそぐには有効かもれす。
ロゴとか画像とかは更新されないことも多いので、これらのファイルはキャッシュ
として長く保ったほうがHIT率は高くなるのれす。