mod_cacheの有効期限で間違えた

mod_cacheの有効期限について勘違いしてた。
mod_cache - Apache HTTP サーバ

mod_cacheは基本的に、Last-Modifiedヘッダがないコンテンツ(レスポンス)はキャッシュしない。"CacheIgnoreNoLastMod On"とする事で、Last-Modifiedヘッダがなくてもキャッシュするようになる。

Last-Modifiedヘッダがあり、有効時間が設定されていないコンテンツ(レスポンス)の有効期限は、特別な式で計算される。

有効時間[s] = (現在日時[s] - コンテンツ最終更新日時[s]) * CacheLastModifiedFactor

Expiresヘッダに使われる有効期限は、"現在日時+有効時間"で決まる。このとき、有効時間は"CacheMaxExpire"を最大とする。

キャッシュ有効時間のデフォルトとして、"CacheDefaultExpire"ディレクティブが利用可能。ただし、これはLast-Modifiedヘッダがなく、有効時間も設定されていないコンテンツに限って有効となる。

ずっと、"CacheDefaultExpire"が無条件で使えるんだと考えてたので、大失敗。PHPでの動的コンテンツのキャッシュを考えていて、If-Modified-Sinceでの304応答が出来るようにと、Last-Modifiedヘッダを付けたのがまずかった(まずくないんだけど)。Last-Modifiedヘッダをつけたのに、"CacheLastModifiedFactor"を調整しなかったので微妙にキャッシュがきかなかったり。

問答無用で一定時間はサーバ側でキャッシュしたコンテンツを返したかったので、"CacheLastModifiedFactor"を"CacheMaxExpire"にそろえて、"Last-Modified == 現在日時"でない限りは"CacheMaxExpire"が使われるように調整。効果云々は抜きにして、期待通りの結果が得られて満足(とりあえずは)。

あと、mod_disk_cacheを使っているので、htcachecleanをデーモンで起動。
htcacheclean - Clean up the disk cache - Apache HTTP Server

さて、これから様子を見て調整してかないとね。

プロフィール

このブログ記事について

このページは、koshigoeが2006年12月27日 21:11に書いたブログ記事です。

ひとつ前のブログ記事は「"URI Template"で何をするんだろう?」です。

次のブログ記事は「ドキュメントを読む癖をつける準備」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。