Mod expiresの使い方
提供: Astarisk Works Wiki
目次 |
mod_exipresとは
mod_expiresはApache HTTP Serverのモジュールの一つで、クライアントへのレスポンスにクライアントサイドのキャッシュを追加する。
mod_headersでもPragmaやCache-Control、Exiresといったキャッシュコントロールのためのレスポンスヘッダを 付加できるが、固定値でしかヘッダーの値を設定できないのに対して、mod_expiresではリクエストから○分後の時間をレスポンスヘッダのExpiresに設定するような動的に変わる値を設定できるようになる。
これはすなわち、クライアントで保存されるキャッシュの有効期限をある時刻ではなくアクセスから何時間という風に設定できるようになると言うこと。クライアントキャッシュが有効な間はクライアントはサーバにアクセスにこないのでサーバの負荷を下げることができる。動的にページを生成しているが更新頻度がそれほど激しくないサイトでは負荷軽減に役立つ。
設定例
次の例は /www/imagesディレクトリにあるファイルのクライアントキャッシュはアクセスから15分間となるよう設定している。つまり、個々のブラウザは最初のアクセスから15分間はローカルに保存したキャッシュを利用し、サーバにはアクセスしないが、15分経過後にアクセスすると再度サーバにアクセスするが、その後また15分間はサーバにアクセスしないようにできる。
<Directory /www/images>
Order allow,deny
Allow from all
ExpiresActive On
ExpiresDefault "access plus 15 minutes"
</Directory>
実際に上記の設定を行ったときにレスポンスヘッダの例は次の通り。
赤い文字の行がmod_expiresによって追加されるヘッダ。
Cache-Controlにはmax-age=900 (=15×60sec)が設定されており、
緑の行のアクセス時刻に対してExpiresヘッダに15分後の時刻が有効期限として設定されて
HTTP/1.1 200 OK Date: Sun, 28 Sep 2008 12:49:25 GMT Server: Apache/2.2.9 (Win32) PHP/5.2.6 Last-Modified: Sun, 28 Sep 2008 09:53:28 GMT ETag: "10000000036ed-229-457f1b8f3811c" Accept-Ranges: bytes Content-Length: 553 Cache-Control: max-age=900 Expires: Sun, 28 Sep 2008 13:04:25 GMT Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html
設定方法
設定はhttpd.confで行う。 まず、mod_expiresをロードするように設定する。
LoadModule expires_module modules/mod_expires.so
そして、mod_expiresの動作に関して設定する。 <Directory>や<Location>で囲って有効範囲を限定することもできる。
設定できるディレクティブは次の3つ
| ディレクティブ | 設定値 | 説明 |
|---|---|---|
| ExpiresActive | onまたはoff | mod_expiresを有効にするための設定。有効にしたいならonを設定する |
| ExpiresByType | 対象とするメディアタイプと有効期間 | ヘッダーを追加する対象をmimeのタイプで指定できる。 |
| ExpiresDefault | 有効期間 | ExpiresByTypeとは異なりすべての種類のファイルを対象とする |
有効期間について
有効期間については基準にするタイミングであるbaseと有効期間を表す数字+単位で設定する。
baseは次の2種類ある。
- access
- アクセス(リクエスト)の時刻を基準に有効期限を計算する
- modification
- ファイルの更新日時を基準に有効期限を計算する。ディスクに保存されているファイルがないと更新日時がわからないため、ファイルとして保存されているものだけで有効となる。
有効期限の単位は次の通り。読んで字のごとく。複数の単位を組み合わせて設定することもできる。
- years
- months
- weeks
- days
- hours
- minutes
- seconds
設定例
#最初にmod_expiresを有効にする ExpiresActive On #次の例はすべての種類のファイルでアクセスから15分間キャッシュを有効にする ExpiresDefault "access plus 15 minutes" #次の例はHTMLファイルに限りアクセスから1ヶ月と15日2時間の間キャッシュを有効にする ExpiresByType text/html "access plus 1 month 15 days 2 hours"