Home > Apache > 【負荷対策】Apacheのモジュールmod_expiresでキャッシュを利用する

【負荷対策】Apacheのモジュールmod_expiresでキャッシュを利用する

  • 投稿日2009-10-06 (火)
  • 更新日2014-12-19 (金) 18:55
  • Apache
Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録 このエントリーを含むはてなブックマーク

Apacheのモジュール、mod_expiresを利用してキャッシュを利用し、転送量を軽減させて負荷対策します。
キャッシュを利用すると負荷対策ばかりか、体感速度も向上します。
キャッシュして欲しくないファイルまでキャッシュされては困ります…が、
mod_expiresは指定したファイルタイプのみキャッシュさせる事ができます。


mod_expiresの組み込みを確認

このサイトのApacheのインストール方法でApacheのインストールを進めていただけたなら
すでにApacheのモジュールとして組み込まれています。

/usr/local/apache2/conf/httpd.conf
にて以下の行がある事を確認してください

LoadModule expires_module modules/mod_expires.so

まだモジュールのインストールがされていない場合は場合によってはApacheの再コンパイルが必要かもしれません。
また、動作実験はApache2.2.13にておこなってみました。

.htaccessにて設定をする

.htaccessにて設定をするとapacheを再起動する事なく設定を反映させる事ができます。
.htaccessへ以下のように記述してみました


ExpiresActive On
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpeg "access plus 1 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType application/x-shockwave-flash "access plus 1 years"
ExpiresByType application/rss+xml "access plus 30 minutes"
ExpiresByType application/x-javascript "access plus 20 days"
ExpiresByType text/html "modification plus 15 minutes"
ExpiresByType text/css "access plus 20 days"

はじめの行はmod_expiresを使用するという宣言になります。
ExpiresActive On
使用の宣言に続き、以下のような感じに設定をしていきます

ExpiresByType ファイルタイプ "(access|modification) plus N (minutes|days|weeks|months|years|)"

ExpiresByType image/png “access plus 30 days”
であれば、pngファイルにアクセスされてから30日間、キャッシュを保存させるヘッダを出力させます。
初めは短い時間でキャッシュを取得させて、じょじょにキャッシュ保持させる日時を伸ばしていくのがいいと思います。

ExpiresByType text/html “modification plus 15 minutes”
modificationと指定すると修正時刻に基づいてキャッシュを生成するようです。
修正された時間から15分間キャッシュを保持する、という事になるようですが…
実はこの検証はうまくいっていないので、ツッコミがあれば宜しくお願いします。

ExpiresDefault “access plus 1 days”
ここでは触れていませんが、このようにExpiresDefaultと指定すると、
全てのファイルに対してキャッシュを設定します。(ここでは1日保持する設定ですね)
動的なサイトを使用している場合等、キャッシュを取得されては困る項目について
この設定がされるとよろしくないので、通常は指定しないのがいいと思います。



.htaccessは、置いたフォルダ以下全体に影響を与えます。
僕の場合はトップディレクトリへ設置してみました。
即座に反映されるので、FireBug等のツールで、レスポンスヘッダのCache-ControlのMax-ageが
指定した時間に設定されているかを確認してみてください。

ちなみに上記の設定でpngファイルを読み込んだ場合のレスポンスヘッダは以下になりました。

Date	Tue, 06 Oct 2009 10:32:58 GMT
Server	Apache/2.2.13 (Unix)
Connection	Keep-Alive
Keep-Alive	timeout=5, max=99
Expires	Thu, 05 Nov 2009 10:32:58 GMT
Cache-Control	max-age=2592000
Vary	Accept-Encoding,User-Agent
30 daysで設定したので2592000(秒)としてmax-ageが設定されています。
成功です。




Home > Apache > 【負荷対策】Apacheのモジュールmod_expiresでキャッシュを利用する

Return to page top

運営会社(株)シーズ WEBアプリケーション、フリーCGI配布「ahref(エーエイチレフ)」 Eビジネスに強いレンタルサーバー「ACサーバー」 大容量ファイル転送サービス「デカメール」