Nginx Cache Controllerの設定項目詳細

プラグイン「Nginx Cache Controller」の基本的な設定は「Nginx Cache Controllerの設定と使い方」でご紹介しましたが、今回は各設定の詳しい内容をご紹介します。

なおAmimotoAMIでは、すでに設定が完了済みですので設定を変更する必要はありませんが、ご自身でカスタマイズを行われる際にはご確認ください。

「Nginx Cache Controller」はデフォルトでは以下の設定下で動作するようになっています。

キャッシュの有効期間に関する設定

Nginx Cache Controller では、ページのタイプごとに別々のキャッシュの有効期間を設定できるようになっています。

Nginx-Cache-1

この機能は、Nginx Cache Controllerプラグインによって、X-Accel-Expires ヘッダを用いてリバースプロキシに対して有効期間を指定することで実現しています。

しかし、デフォルトの Nginx は、fastcgi から受け取った X-Accel-Expires ヘッダを無視する仕様となっているため、以下の設定を追加して、X-Accel-Expires を含むいくつかのレスポンスヘッダーに対して許可を与える必要があります。

参考までにデフォルトのAmimotoAMIでは、以下のようになっています。

location ~ \.php$ {
    ...
    ...
    fastcgi_pass_header "X-Accel-Redirect";
    fastcgi_pass_header "X-Accel-Buffering";
    fastcgi_pass_header "X-Accel-Charset";
    fastcgi_pass_header "X-Accel-Expires";
    fastcgi_pass_header "X-Accel-Limit-Rate";
    ...
}

キャッシュの自動削除のための設定

Nginx Cache Controller のキャッシュの自動削除を行うには、以下の条件を満たしている必要があります。

  • 「キャッシュ削除の有効化」が Yes になっていること。
  • Nginx Cache Controller が期待するキャッシュのパスとリバースプロキシのキャッシュのパスが同じであること。
  • リバースプロキシのキャッシュに対して、WordPress(バックエンドのウェブサーバー)からの書き込み権限があること。

Nginx-Cache-2

以上を踏まえたNginxの設定は以下のとおりとなります。

proxy_cache_pathの設定

Nginx Cache ControllerのデフォルトにあわせたNginxの設定例

proxy_cache_path  /var/cache/nginx levels=1:2
    keys_zone=czone:32m max_size=256m inactive=1440m;

以下はAmimotoAMIでの例です。

proxy_cache_path  /var/cache/nginx/proxy_cache levels=1:2
    keys_zone=czone:32m max_size=256m inactive=1440m;

上で紹介した2つの例で、共通して重要なのは、/var/cache/nginx/var/cache/nginx/proxy_cache といったパスの値と、1:2 というlevelsの値です。

これらが Nginx Cache Controller の設定と一致していないと、Nginx Cache Controller がキャッシュのパスを見つけることができないため、キャッシュの削除ができません。

Nginx-Cache-3

proxy_cache_keyの設定

Nginxリバースプロキシは、ブラウザからリクエストがあったURLごとにキャッシュを生成し、proxy_cache_key の値を元に md5 ハッシュ値に変換したファイル名で保存します。

Nginx Cache Controller では、proxy_cache_key の値が以下のとおりになっていることを想定してキャッシュを削除しています。

proxy_cache_key "$scheme://$host$request_uri"

この設定が不適切であると、キャッシュのファイル名を正しく取得できないためキャッシュの削除ができなくなります。

この値は、Nginx Cache Controller 内の nginxchampuru_get_reverse_proxy_key フィルターフックでカスタマイズすることも可能ですが、その場合、リバースプロキシ側の設定もそれに合わせて修正する必要があります。