mod_cache - Apache HTTP サーバ

Apache HTTP サーバ バージョン 2.4

Apache > HTTP サーバ > ドキュメンテーション > バージョン 2.4 > モジュール

# Apache モジュール mod_cache

翻訳済み言語: en | fr | ja | ko

この日本語訳はすでに古くなっている 可能性があります。 最近更新された内容を見るには英語版をご覧下さい。

説明: | URI をキーにしたコンテンツのキャッシュ
ステータス: | Extension
モジュール識別子: | cache_module
ソースファイル: | mod_cache.c

### 概要

このモジュールは `Allow` や `Deny` ディレクティブを無視しますので、 注意して使って下さい。クライアントのホスト名、アドレスや環境変数を使って アクセスを制限したいコンテンツに対してはキャッシュ機能を有効にするべきではありません。

`mod_cache` はローカルのコンテンツやプロキシされた コンテンツをキャッシュするために使われる RFC 2616 準拠の HTTP コンテンツキャッシュを実装しています。`mod_cache` の動作にはストレージを管理するモジュールが必要です。標準 Apache 配布には二つストレージ管理モジュールが含まれています:

`mod_cache_disk`
  ディスクを使用したストレージ管理機構を実装しています。
`mod_mem_cache`
  メモリを使用したストレージ管理機構を実装しています。 `mod_mem_cache` は次の二つのモードのどちらかで動作する ように設定できます: オープンされているファイル記述子をキャッシュするモードか、 ヒープ上でのオブジェクトの自体をキャッシュをするモードです。 `mod_mem_cache` はローカルで生成されるコンテンツや、 `mod_proxy` が `ProxyPass` を使って設定されている ときの (つまりリバースプロキシ での) バックエンドサーバの コンテンツをキャッシュするのに使えます。

コンテンツのキャッシュへの保存と取得は URI に基づいたキーが使われます。 アクセス保護のかけられているコンテンツはキャッシュされません。

より詳細な解説や例についてはキャッシュ機能 を参照してください。

### ディレクティブ

### トピック

- 関連モジュールとディレクティブ
- サンプル設定

### 参照

- キャッシュ機能

- コメント

## 関連モジュールとディレクティブ

関連モジュール | 関連ディレクティブ
--- | ---
`mod_cache_disk` `mod_mem_cache` | `CacheRoot` `CacheDirLevels` `CacheDirLength` `CacheMinFileSize` `CacheMaxFileSize` `MCacheSize` `MCacheMaxObjectCount` `MCacheMinObjectSize` `MCacheMaxObjectSize` `MCacheRemovalAlgorithm` `MCacheMaxStreamingBuffer`

## サンプル設定

### Sample httpd.conf

`#
# Sample Cache Configuration
#
LoadModule cache_module modules/mod_cache.so
<IfModule mod_cache.c>
#LoadModule cache_disk_module modules/mod_cache_disk.so
# If you want to use mod_cache_disk instead of mod_mem_cache,
# uncomment the line above and comment out the LoadModule line below.
<IfModule mod_cache_disk.c>
CacheRoot c:/cacheroot
CacheEnable disk /
CacheDirLevels 5
CacheDirLength 3
</IfModule>
LoadModule mem_cache_module modules/mod_mem_cache.so
<IfModule mod_mem_cache.c>
CacheEnable mem /
MCacheSize 4096
MCacheMaxObjectCount 100
MCacheMinObjectSize 1
MCacheMaxObjectSize 2048
</IfModule>
# When acting as a proxy, don't cache the list of security updates
CacheDisable http://security.update.server/update-list/
</IfModule>`

## CacheDefaultExpire ディレクティブ

説明: | 期日が指定されていないときにドキュメントをキャッシュするデフォルトの期間
構文: | `CacheDefaultExpire seconds`
デフォルト: | `CacheDefaultExpire 3600 (1時間)`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

`CacheDefaultExpire` ディレクティブは、ドキュメントに 有効期限 (expiry) や最終修正時刻 (last-modified) が指定されていない場合の デフォルトの時間を指定します。`CacheMaxExpire` ディレクティブで指定された値はこの設定を上書きしません。

`CacheDefaultExpire 86400`

## CacheDetailHeader ディレクティブ

説明: | Add an X-Cache-Detail header to the response.
構文: | `CacheDetailHeader on|off`
デフォルト: | `CacheDetailHeader off`
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess
ステータス: | Extension
モジュール: | mod_cache
互換性: | Available in Apache 2.3.9 and later

このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。

## CacheDisable ディレクティブ

説明: | 特定の URL をキャッシュしない
構文: | `CacheDisable url-string`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

`CacheDisable` ディレクティブで `mod_cache` モジュールが url-string 以下の URL をキャッシュしないようにします。

### 例

`CacheDisable /local_files`

## CacheEnable ディレクティブ

説明: | 指定したストレージ管理方式を使ってのキャッシュを有効にする
構文: | `CacheEnable cache_type url-string`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

`CacheEnable` ディレクティブで `mod_cache` モジュールが url-string 以下の URL をキャッシュするようにします。 キャッシュストレージ管理方式は cache_type 引数で指定します。 cache_type `mem` で、 `mod_mem_cache` で実装されているメモリを使ったストレージ 管理方式を使うように `mod_cache` に指示します。 cache_type `disk` で、 `mod_cache_disk` で実装されているディスクを使ったストレージ 管理を使うように `mod_cache` に指示します。 cache_type `fd` は `mod_cache` に `mod_mem_cache` により実装されているファイル記述子の キャッシュを使うように指示します。

(下の例のように) `CacheEnable` ディレクティブの URL 空間が重複しているときは、該当するストレージ方式を順に試して、 実際にリクエストの処理ができると、その方式で処理します。 ストレージ管理方式が実行される順番は設定ファイル中の `CacheEnable` の順番により決定されます。

`CacheEnable mem /manual
CacheEnable fd /images
CacheEnable disk /
`

フォワードプロクシサーバとして動作する場合、 url-string を使って、キャッシュを有効にするリモートサイトや プロクシプロトコルを指定することもできます。

`# Cache proxied url's
CacheEnable disk /
# Cache FTP-proxied url's
CacheEnable disk ftp://
# Cache content from www.apache.org
CacheEnable disk http://www.apache.org/
`

## CacheHeader ディレクティブ

説明: | Add an X-Cache header to the response.
構文: | `CacheHeader on|off`
デフォルト: | `CacheHeader off`
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess
ステータス: | Extension
モジュール: | mod_cache
互換性: | Available in Apache 2.3.9 and later

このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。

## CacheIgnoreCacheControl ディレクティブ

説明: | キャッシュされているコンテンツを返さないようにクライアントから リクエストされても無視する
構文: | `CacheIgnoreCacheControl On|Off`
デフォルト: | `CacheIgnoreCacheControl Off`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

Cache-Control: no-cache ヘッダや Pragma: no-store ヘッダのあるリクエストに 対しては、通常キャッシュを使いません。`CacheIgnoreCacheControl` ディレクティブを使うと、この動作を上書きできます。 `CacheIgnoreCacheControl` On とすると、 リクエストに no-cache という値があっても、キャッシュを使ってドキュメントを 返すようになります。認証を必要とするドキュメントは決して キャッシュされません。

`CacheIgnoreCacheControl On`

### 警告

このディレクティブを使うと、ドキュメント取得時にキャッシュを使わないように クライアントがリクエストしているにもかかわらず、キャッシュを 使うようになります。その結果、 古いコンテンツが送られ続けることになってしまうかもしれません。

### 参照

- `CacheStorePrivate`
- `CacheStoreNoStore`

## CacheIgnoreHeaders ディレクティブ

説明: | 指定された HTTP ヘッダをキャッシュに保存しない。
構文: | `CacheIgnoreHeaders header-string [header-string] ...`
デフォルト: | `CacheIgnoreHeaders None`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

RFC 2616 によると、hop-by-hop HTTP ヘッダはキャッシュには保管されません。 以下のヘッダは hop-by-hop ヘッダに該当しますので、 `CacheIgnoreHeaders` の設定に関係なくキャッシュには保管されません:

- `Connection`
- `Keep-Alive`
- `Proxy-Authenticate`
- `Proxy-Authorization`
- `TE`
- `Trailers`
- `Transfer-Encoding`
- `Upgrade`

`CacheIgnoreHeaders` で キャッシュに保管しない追加の HTTP ヘッダを指定します。 例えば、クッキーをキャッシュに保管しないようにした方がよい場合も あるでしょう。

`CacheIgnoreHeaders` の引数は、 キャッシュに保管しない HTTP ヘッダを空白区切りにしたリスト形式です。 キャッシュに保管しないヘッダが hop-by-hop ヘッダだけの場合 (RFC 2616 準拠の動作のとき) は、 `CacheIgnoreHeaders` を `None` に設定できます。

### 例 1

`CacheIgnoreHeaders Set-Cookie`

### 例 2

`CacheIgnoreHeaders None`

### 警告:

`Expires` のような適切のキャッシュ管理のために必要な ヘッダが `CacheIgnoreHeaders` の設定により 保管されていないときは、mod_cache の動作は定義されていません。

## CacheIgnoreNoLastMod ディレクティブ

説明: | 応答に Last Modified が無くても気にしないようにする
構文: | `CacheIgnoreNoLastMod On|Off`
デフォルト: | `CacheIgnoreNoLastMod Off`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

通常、Last-Modified による最終修正時刻の無いドキュメントはキャッシュ されません。(例えば `mod_include` による処理のときなどに) Last-Modified 時刻が消去されたり、そもそも最初から提供されていない 状況があります。`CacheIgnoreNoLastMod` ディレクティブを使うと、Last-Modified 日時が指定されていない ドキュメントでもキャッシュするように指定できます。ドキュメントに 最終修正時刻 (Last-Modified) 有効期限 (expiry) がない場合は、有効期限の 生成に `CacheDefaultExpire` が使われます。

`CacheIgnoreNoLastMod On`

## CacheIgnoreQueryString ディレクティブ

説明: | キャッシュ時にクエリーストリングを無視する
構文: | `CacheIgnoreQueryString On|Off`
デフォルト: | `CacheIgnoreQueryString Off`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

クエリーストリング付のリクエストについては通常、クエリーストリングごとに 個別にキャッシュされます。 キャッシュされるのは有効期限が指定されている場合のみで、これは RFC 2616/13.9 に従ったものです。 `CacheIgnoreQueryString` ディレクティブを使うと 有効期限が指定されていなくてもキャッシュしますし、 クエリーストリングが異なっていてもキャッシュを返します。 このディレクティブが有効になっている場合、キャッシュ機能の側面からみると、 あたかもリクエストにクエリーストリングがついていなかったかのように扱います。

`CacheIgnoreQueryString On`

## CacheIgnoreURLSessionIdentifiers ディレクティブ

説明: | Ignore defined session identifiers encoded in the URL when caching
構文: | `CacheIgnoreURLSessionIdentifiers identifier [identifier] ...`
デフォルト: | `CacheIgnoreURLSessionIdentifiers None`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。

## CacheKeyBaseURL ディレクティブ

説明: | Override the base URL of reverse proxied cache keys.
構文: | `CacheKeyBaseURL URL`
デフォルト: | `CacheKeyBaseURL http://example.com`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache
互換性: | Available in Apache 2.3.9 and later

このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。

## CacheLastModifiedFactor ディレクティブ

説明: | LastModified の日付に基づいて有効期限 (expiry) を計算するための重みを指定する
構文: | `CacheLastModifiedFactor float`
デフォルト: | `CacheLastModifiedFactor 0.1`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

ドキュメントに Last-Modified の日付が無いけれども有効期限 (expiry) の日付があるというときに、有効期限を最終修正時刻からの経過時間として 計算するようにできます。有効期限を次の計算式に従って生成するのですが、 そのときに使われる factor を `CacheLastModifiedFactor` ディレクティブで指定します。

`expiry-period = time-since-last-modified-date * factor expiry-date = current-date + expiry-period`

例えば、ドキュメントが 10 時間前に最後に修正されていて、 factor が 0.1 であれば、期日は 10*0.1 = 1 時間に 設定されます。現在時刻が 3:00pm であれば、計算された期日は 3:00pm + 1hour = 4:00pm になります。

期日が `CacheMaxExpire` で設定されている値 より大きくなってしまっている場合は、`CacheMaxExpire` の設定値が優先されます。

`CacheLastModifiedFactor 0.5`

## CacheLock ディレクティブ

説明: | Enable the thundering herd lock.
構文: | `CacheLock on|off`
デフォルト: | `CacheLock off`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache
互換性: | Available in Apache 2.2.15 and later

このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。

## CacheLockMaxAge ディレクティブ

説明: | Set the maximum possible age of a cache lock.
構文: | `CacheLockMaxAge integer`
デフォルト: | `CacheLockMaxAge 5`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。

## CacheLockPath ディレクティブ

説明: | Set the lock path directory.
構文: | `CacheLockPath directory`
デフォルト: | `CacheLockPath /tmp/mod_cache-lock`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。

## CacheMaxExpire ディレクティブ

説明: | ドキュメントをキャッシュする最大時間を秒数で表したもの
構文: | `CacheMaxExpire seconds`
デフォルト: | `CacheMaxExpire 86400 (一日)`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

`CacheMaxExpire` ディレクティブは、 キャッシュする HTTP ドキュメントを、元のサーバに問い合わせないまま最大何秒 保持してもよいかを指定します。つまり、ドキュメントは最大でこの秒数間ぶん古く なることになります。この最大値は、(訳注: レスポンス中で)ドキュメントと共に ドキュメントの期日が提供されている場合でも適用されます。

`CacheMaxExpire 604800`

## CacheMinExpire ディレクティブ

説明: | ドキュメントをキャッシュする最小秒数
構文: | `CacheMinExpire seconds`
デフォルト: | `CacheMinExpire 0`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

キャッシュ可能な HTTP ドキュメントがあったときに、オリジンサーバに問い合わせることなく 保持する秒数の最小値は `CacheMinExpire` ディレクティブを使って設定します。 この値は、ドキュメントに妥当な有効期限が指定されていなかった場合にのみ使われます。

`CacheMinExpire 3600`

## CacheQuickHandler ディレクティブ

説明: | Run the cache from the quick handler.
構文: | `CacheQuickHandler on|off`
デフォルト: | `CacheQuickHandler on`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache
互換性: | Apache HTTP Server 2.3.3 and later

このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。

## CacheStaleOnError ディレクティブ

説明: | Serve stale content in place of 5xx responses.
構文: | `CacheStaleOnError on|off`
デフォルト: | `CacheStaleOnError on`
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess
ステータス: | Extension
モジュール: | mod_cache
互換性: | Available in Apache 2.3.9 and later

このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。

## CacheStoreExpired ディレクティブ

説明: | Attempt to cache responses that the server reports as expired
構文: | `CacheStoreExpired On|Off`
デフォルト: | `CacheStoreExpired Off`
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess
ステータス: | Extension
モジュール: | mod_cache

このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。

## CacheStoreNoStore ディレクティブ

説明: | no-store と指定されているレスポンスのキャッシュを試みる。
構文: | `CacheStoreNoStore On|Off`
デフォルト: | `CacheStoreNoStore Off`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

通常 Cache-Control: no-store ヘッダのついているレスポンスは キャッシュされません。`CacheStoreNoCache` ディレクティブでこの挙動を上書きできます。 `CacheStoreNoCache` On で no-store ヘッダのついている リソースに対してもキャッシュを試みるようになります。 ただし認証の求められるリソースは 決して キャッシュされません。

`CacheStoreNoStore On`

### 警告:

RFC 2616 に記載されているように no-store ディレクティブは、 "不注意による機密情報の漏洩や残留 (バックアップテープ等) を防ぐ" 目的で使われますが、このオプションを有効にすると、 機密情報を保持することになってしまいます。 ですので、ここで警告しておきます。

### 参照

- `CacheIgnoreCacheControl`
- `CacheStorePrivate`

## CacheStorePrivate ディレクティブ

説明: | private と指定されているレスポンスのキャッシュを試みる。
構文: | `CacheStorePrivate On|Off`
デフォルト: | `CacheStorePrivate Off`
コンテキスト: | サーバ設定ファイル, バーチャルホスト
ステータス: | Extension
モジュール: | mod_cache

通常 Cache-Control: private ヘッダのついているレスポンスは キャッシュされません。`CacheStorePrivate` ディレクティブでこの挙動を上書きできます。 `CacheStorePrivate` On で private ヘッダのついている リソースに対してもキャッシュを試みるようになります。 ただし認証の求められるリソースは 決して キャッシュされません。

`CacheStorePrivate On`

### 警告:

上流サーバがキャッシュしないように指定してきても、 それを無視してキャッシュするようになります。 望ましい挙動になるのは、本当に 'private' なキャッシュについてのみでしょう。

### 参照

- `CacheIgnoreCacheControl`
- `CacheStoreNoStore`

翻訳済み言語: en | fr | ja | ko

## コメント

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.