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   

| CacheEnable mem / MCacheSize 4096 MCacheMaxObjectCount 100 MCacheMinObjectSize 1 MCacheMaxObjectSize 2048 |

これはデフォルトの設定です - お好みに応じて変更できます。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 リンク

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。