Apache キャッシング · 1 min read · Jan 01, 2026
Debian Etch における Apache の mod_cache を使用したキャッシング - ページ 2
2.2 mod_mem_cache
mod_mem_cache の設定は /etc/apache2/mods-available/mem_cache.conf にあります:
vi /etc/apache2/mods-available/mem_cache.conf | |
これはデフォルトの設定です - お好みに応じて変更できます。mod_mem_cache の設定ディレクティブのリストはここにあります: http://httpd.apache.org/docs/2.2/mod/mod_mem_cache.html
次に、mod_cache と mod_mem_cache を次のように有効にします:
a2enmod cache
a2enmod mem_cache
/etc/init.d/apache2 force-reloadこれで完了です!mod_mem_cache を使用すると、キャッシュディレクトリをクリーンアップする必要はありません。
3 テスト
残念ながら mod_cache はログ機能を提供していないため、ログが機能しているかどうかを知るのは難しいです。そこで、HTTP ヘッダーを送信して mod_cache に 300 秒間ファイルをキャッシュするように指示し、単にタイムスタンプを表示する小さな PHP テストファイル /var/www/cachetest.php を作成します:
vi /var/www/cachetest.php| "; ?> |
今、そのファイルをブラウザで呼び出してください - 現在のタイムスタンプが表示されるはずです。次に、ブラウザのアドレスバーをクリックして ENTER を押し、ページを再読み込みします(F5 やリロードボタンを押さないでください - これでは常にサーバーから新しいコピーを取得します!) - すべてがうまくいけば、古いキャッシュされたタイムスタンプがまだ表示されるはずです。300 秒待つと、キャッシュではなくサーバーから新しいコピーが取得されるはずです。
4 HTTP ヘッダー
キャッシングはデフォルトでは機能しません - キャッシングが機能するようにウェブアプリケーションを変更する必要があります(お使いのウェブアプリケーションがすでにキャッシングをサポートしている可能性があります - 詳細はアプリケーションのドキュメントを参照してください)。mod_cache は、ウェブアプリケーションから送信される HTTP ヘッダーがキャッシュするように指示した場合にのみ、ウェブページをキャッシュします。
以下は、mod_cache に キャッシュしない ように指示するヘッダーの例です:
- 過去の日付の Expires ヘッダー: “Expires: Sun, 19 Nov 1978 05:00:00 GMT”
- 特定の Cache-Control ヘッダー: “Cache-Control: no-store, no-cache, must-revalidate” または “Cache-Control: must-revalidate, max-age=0”
- Set-Cookie ヘッダー: クッキーが設定されている場合、そのページはキャッシュされません。
したがって、mod_cache にページをキャッシュさせたい場合は、そのようなヘッダーを送信しないようにアプリケーションを変更してください。
mod_cache にページをキャッシュさせたい場合は、未来の日付の Expires ヘッダーを設定できますが、推奨される方法は max-age を使用することです:
"Cache-Control: must-revalidate, max-age=300"これにより、mod_cache にページを 300 秒間キャッシュするように指示します(max-age) - 残念ながら mod_cache は s-maxage オプションを認識しません(http://www.mnot.net/cache_docs/#CACHE-CONTROL を参照)、そのため max-age オプションを使用する必要があります(これによりブラウザにもキャッシュを指示します - 予期しない結果が出た場合はこれを念頭に置いてください!)。mod_cache が s-maxage オプションを知っていれば、”Cache-Control: must-revalidate, max-age=0, s-maxage=300” を使用でき、mod_cache にキャッシュするように指示できますが、ブラウザには指示しません。
もちろん、このヘッダーは、上記のようなキャッシュしないヘッダー(過去の Expires、Set-Cookie など)を同時に送信する場合は無意味です!
キャッシングにとって非常に重要なもう一つのヘッダーは次のとおりです:
"Vary: Accept-Encoding"これにより、mod_cache は各キャッシュされたページの 2 つのコピーを保持します。1 つは圧縮された (gzip) バージョン、もう 1 つは非圧縮のバージョンで、ユーザーエージェント/ブラウザの機能に応じて適切なバージョンを配信できます。一部のユーザーエージェントは gzip 圧縮を理解しないため、非圧縮バージョンを取得する必要があります。
要約すると、mod_cache にキャッシュさせたい場合は、次の 2 つのヘッダーを使用してください:
“Cache-Control: must-revalidate, max-age=300”
“Vary: Accept-Encoding”
そして、過去の日付の Expires ヘッダー、クッキーなどが送信されないようにしてください。
アプリケーションが PHP で書かれている場合、PHP の header() 関数を使用して HTTP ヘッダーを送信できます。例えば、次のように:
header(“Cache-Control: must-revalidate, max-age=300”);
header(“Vary: Accept-Encoding”);
HTTP ヘッダーとキャッシングについてもっと学びたい場合は、このページを必ずお読みください: http://www.mnot.net/cache_docs/
5 リンク
- Apache: http://httpd.apache.org/
- mod_cache: http://httpd.apache.org/docs/2.2/mod/mod_cache.html
- mod_disk_cache: http://httpd.apache.org/docs/2.2/mod/mod_disk_cache.html
- mod_mem_cache: http://httpd.apache.org/docs/2.2/mod/mod_mem_cache.html
- Apache キャッシングガイド: http://httpd.apache.org/docs/2.2/caching.html
- キャッシングチュートリアル: http://www.mnot.net/cache_docs/
- Debian: http://www.debian.org/
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。