Apache+mod_mem_cacheでキャッシュしてみる

Squidを使えば簡単にリバースプロキシを作ることができます。ただ、一つ問題がありキャッシュ時間が分単位となります。

リアルタイム性をできるだけ持たしたいのだが、数秒間のキャッシュを行いたいときにはSquidではちょっとできそうにありません。そこでApache+mod_mem_cacheで試してみます

参考にしたページ

  1. http://httpd.apache.org/docs/2.2/mod/mod_cache.html
  2. http://d.hatena.ne.jp/mhag/20070417/1176786290
  3. http://blog.as-is.net/2007/02/mt-searchcgi-modcache.html
  4. http://kamoland.com/wiki/wiki.cgi?mod_cache%A4%C7Wiki%28CGI%29%A4%CE%B9%E2%C2%AE%B2%BD
  5. http://d.hatena.ne.jp/rougeref/20090616

Apache2.2.22インストール

httpd.confをこんな感じで設定します設定します。

どうやらmod_mem_cacheはメモリ上のキャッシュが変に効いているので最初はいいがそのうちダメになるので、mod_disk_cacheをつかいます

今回はJSPとperlのCGIを対象にしますので、mod_perlも設定しておきます

Perl

これらの設定でJSPは簡単にキャッシュが効いてくれたのですがどうもcgiはうまくキャッシュされていない模様です。

どうもHTTPHeaderにExpiresとCache-Control:max-ageがうまく入っていなかったようですのでcgi側で強制的に入れてやります

結局のところ

apacheの設定

mod_disk_cacheを使うのが吉。

その場合、CacheDirをクローンで定期的に消す必要あり

cgiの設定

たぶん不要だがmod_perlを使うようにする

perlの書き方

HeaderにExpires:5 と Cache-Control: max-age=5 を入れておく

なぜか勝手にApacheがmax-age=0を返していたのでこれは必須