2018.6.18

キャッシュの有効期限を設定する(expires)

nginxで静的ファイルに対してキャッシュの有効期限を設定する方法です。逆に常に新しいファイルにアクセスする方法(キャッシュさせたくない場合)も掲載しておきます。

キャッシュの設定

ディレクトリ「/etc/nginx/conf.d」配下に置いたファイル「~.conf」に以下の設定を追加します。

server {
    location / {
        expires 1d;
    }
}

上記の設定ではアクセスされたコンテンツが1日間キャッシュされます。

拡張子でキャッシュされるコンテンツを指定する場合は以下のようにします。

server {
    location / {
        if ($uri ~ \.(gif|jpg|png|ico|js|css|json)$) {
            expires 1d;
        }
    }
}

「expires」の書き方はいくつかあるので下記のリンクを参考にしてください。

キャッシュさせたくない場合の設定

毎回、新しいファイルにアクセスしてほしい場合は以下のように設定します。

server {
    location / {
        expires -1;
        etag off;
        if_modified_since  off;
    }
}

nginxのデフォルトでは「etag」が有効になっているので、サーバ内のコンテンツが更新されていなかった場合、ステータスコード「304(Not Modified)」が返されて、クライアントのキャッシュが表示されてしまうようです。

「if_modified_since」も有効になっていて、こちらは最初のアクセス時に最終の更新時刻を送信しておいて、2回目以降のアクセスでサーバ内のコンテンツの更新時刻と比較して、変更がなければ、etag同様にクライアントのキャッシュが表示されるようです。

詳しくは以下のリンクを参照。

ちなみにexpiresを「off」に設定した場合は、ブラウザのアドレスにURLを入力して直接叩くとサーバにファイルを探しに行きますが、<a>タグを使ったページ遷移だと、クライアントのキャッシュを参照するようでした。

「off」と「-1」は同じものだと思っていたので、これになかなか気づきませんでした。

Nginx】関連記事