2007-12-29

Apache2.2の mod_proxyと mod_cacheであらゆるものをキャッシュする

mod_proxyとmod_cacheを使うと、Apacheをキャッシュプロキシとして使うことが出来る。これは広く知られている。

ところで、普通キャッシュプロキシは動的コンテンツをキャッシュしない。しかし、(ごくごくレアではあるが)キャッシュできるならとにかくなんでもキャッシュして欲しい場合もある。どんなケースか具体的には語らないが。

mod_cacheが何を持って動的コンテンツであるか(ひいては、キャッシュ対象としてふさわしいコンテンツであるか)判断しているかは mod_cacheのドキュメント(翻訳ではなく原文のほう)を参照するとして、手っ取り早く「貪欲キャッシュ」を実現するには下記のようなProxy設定にする。
ProxyRequests On
CacheRoot /var/cache/apache2
CacheEnable disk /
CacheIgnoreCacheControl On
CacheIgnoreNoLastMod On
CacheStoreNoStore On
CacheStorePrivate On

Header set Expires "Thu, 01 Jan 2099 00:00:00 GMT"
CacheRoot設定(キャッシュファイルを保存する場所)は各自の環境に合わせられたし。なおGentoo(Portage)でApacheをインストールした場合は /var/cache/apache2が自動的に作成されている。

重要なのは、Headerディレクティブ(要mod_headers)で Expiresヘッダを強制的につけることで、パラメータつきのGETリクエストに対するレスポンスもキャッシュ対象として認識させていることだ。このハックには計り知れない副作用が予想されるので、共用のWebサーバに決してそのままこの設定を適用しない(<directory proxy:*>で囲むなどする)よう注意されたい。

0 件のコメント:

コメントを投稿

<< ホーム