9.23. キャッシュ機能を利用する

Apache2.2 の mod_cache モジュールや mod_disk_cache モジュール、mod_mem_cache モジュールなどの提供するキャッシュ機能を利用することで Web サーバーのコンテンツ応答性能を向上させます。

またmod_proxy モジュールの提供する機能を利用してプロキシサーバーやリモートサーバーのミラーとして動作させているような場合にもキャッシュ機能を利用することで性能向上を図ることができます。なお、/etc/httpd/conf/httpd.conf には以下の記述があり必要なモジュールはデフォルトで読み込まれています。

LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so

9.23.1. ディスクベースのキャッシュ設定

コンテンツを格納する場所としてメモリを使用する場合とディスクを使用する場合があります。ここではディスクベースの設定について解説します。ディスクキャッシュを有効にするには /etc/httpd/conf/httpd.conf ファイルを編集します。初期状態では以下のように <proxy> ディレクティブとともにコメントとして記述されています。

<IfModule mod_proxy.c>
#ProxyRequests On
#<Proxy *>
#    Order deny,allow
#    Deny from all
#    Allow from .exampele.com
</Proxy>
#ProxyVia On
<IfModule mod_disk_cache.c>
#   CacheEnable disk /
#   CacheRoot "/var/cache/mod_proxy"
#</IfModule>
#
#</IfModule>

注意

プロキシ機能はサーバーのセキュリティが確保できてから On にするようにしてください。オープンプロキシサーバーは自身の管理するサーバーやネットワークにとってだけでなくインターネット全体にとって危険です。

ディスクキャッシュに関連するディレクティブは以下の通りです。

CacheRoot directory

キャッシュの格納先を指定します。

CacheEnable cache_type url-string

ディスクキャッシュの場合、cache_type に disk を指定します。mem と指定をするとメモリキャッシュになります。また、url-string にはキャッシュ対象とする URL を指定します。

CacheDisable url-string

特定の URL のキャッシュを無効にします。

CacheDirLevels levels

キャッシュ格納先サブディレクトリを CacheRoot から何階層とするのかを指定します。

CacheDirLength length

キャッシュ格納先サブディレクトリの名前の文字数を指定します。

CacheMaxFileSize bytes

ドキュメントをキャッシュするかどうかの最大サイズを指定します。

CacheMinFileSize bytes

ドキュメントをキャッシュするかどうかの最小サイズを指定します。

/var/cache/apache/ ディレクトリ以下にすべての URL をキャッシュする場合の例は以下の通りです。

<IfModule mod_proxy.c>
ProxyRequests On
<Proxy *>
    Order deny,allow
    Deny from all
    Allow from .exampele.com
</Proxy>
<IfModule mod_disk_cache.c>
CacheRoot   "/var/cache/apache/"
CacheEnable disk /
CacheDirLevels 2
CacheDirLength 1
</IfModule>
</IfModule>

キャッシュの格納先ルートディレクトリを作成し、httpd デーモンの書き込みが可能になるよう所有者を apache に変更します。

# mkdir /var/cache/apache
# chown apache.apache /var/cache/apache

設定ファイルを編集した場合は、変更を反映するために httpd を再起動する必要があります。

# /etc/init.d/httpd restart

ティップ

ディスクキャッシュをクリーンアップするためのコマンドとして htcacheclean があります。これは手動で動作させることもデーモンとして動作させることも可能です。以下のように実行した場合、デーモンとして動作し 60 分に一度クリーンアップを実施します。

htcacheclean -n -t -d60 -p/var/cache/apache -l30720M