Nginxでクライアントキャッシュの有効期限を設定しよう

投稿者 : OSCA

概要

 HTTPレスポンスヘッダの項目に、HTTPクライアントにコンテンツのキャッシュ有効期限を返却するためのHTTPレスポンスヘッダ「Expires」があります。 本稿では Nginx で Expires ヘッダを返却させるための概要と設定方法について解説します。

Expiresヘッダの目的

 Nginx での設定方法の解説をする前に、まずは Expires ヘッダの目的について振り返ってみましょう。 HTTPレスポンスヘッダ「Expires」は、HTTPクライアントにコンテンツのキャッシュの有効期限を返却するためのヘッダです。 HTTPクライアントがWEBサイトを再訪した場合に、以前に訪れた際のキャッシュを使ってもらうことで無駄なHTTPアクセスを減らし、WEBページの表示を高速化することが目的です。 そのためにコンテンツのキャッシュ有効期限を返却するわけです。

要点

  • キャッシュ有効期限内はキャッシュを利用するため、高速にコンテンツを表示できる。
  • キャッシュを利用するため、無駄なインターネット通信を削減できる。
  • サーバーは無駄なリクエストを受けずに済むため、サーバー負荷を削減できる。

 Expires ヘッダについてもっと詳しく知りたい方は「HTTPレスポンスヘッダ Expires とは?」を参考にしてください。

Nginxにおける設定

 Nginx では、設定ファイルで項目 expires を設定するだけです。 次の例では、クライアントにアクセス後30日間キャッシュさせています。

expires 30d;

 ただし実際には、Expires を付与する対象を静的コンテンツだけになるように拡張子などで絞り込むことが一般的ですので、次のような記述になります。

location ~ .*\.(html|jpg|gif|png|css|js) {
    expires 30d;
}

設定における注意点

 最後に Expires の設定における注意点について解説します。

 まずは、繰り返しになりますが、動的コンテンツに Expires を設定しないことです。 アクセスするたびに変化するような性質のコンテンツに Expires を設定してしまうと、利用者には更新されたコンテンツが表示されなくなってしまいます。 静的コンテンツにのみ Expires が返却されるように設定するように注意してください。

 また、キャッシュ有効期限にも注意が必要です。 1週間〜1年の期間を設定することが望ましいとされています。 1年を超える設定はPRCのガイドラインに反するので注意が必要です。

おわりに

 本稿では Nginx でHTTPクライアント(ブラウザ)のキャッシュ期間を指定する Expires を設定する方法について解説しました。 パフォーマンスチューニングという観点では、次のHTTP通信圧縮の設定も行ってみてはいかがでしょうか?

著者 : OSCA

OSCA

 初級WEBエンジニアです。最近は Android, iOS, WEBアプリの作成に力を入れています。 個人として何か一つでも世の中の多くの人に使ってもらえるアプリを作ろうと日々奮闘中です。
@engineer_osca