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

Apache HTTP Server

(この記事は STBBS.NET Blogに掲載された記事を2013年4月に移動したものです)

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:*>で囲むなどする)よう注意されたい。

同じカテゴリの記事

静的コンテンツとAPIそれぞれへのHTTPリクエストを Apacheと Javaアプリケーションサーバに振り分ける簡単な設定 2014年1月21日
mod_extract_forwardedと多段 Proxy 2013年10月15日
DebianのApache2.2で DocumentRootにWebDAVアクセスするための最短手順 2010年8月6日
Sambaのパスワードデータベースを利用してApacheのBASIC認証を行う 2010年6月5日
ApacheとWebDAVとPHP 2010年1月17日

お勧めカテゴリ

英語でアニメ観ようず
なじみ深い日本製アニメの英語版DVDで、字幕と音声から英語を学びましょうという趣旨のシリーズ記事です。
ScalaのようでJavaだけど少しScalaなJSON API
Scalaと Spring Frameworkを使って REST的なJSON APIを実装してみましょう。
ドクジリアン柔術少女 すから☆ぱいそん
代表 嶋田大貴のブログです。写真は神仏に見せ金をはたらく罰当たりの図