Kusanagi WordPress プラットフォームでは Fcache とBcache がある。
Fcache とはNginx ヱブサーバーのキャッシュ機能であり、Kusanagi の独自機能ではない。
Nginx のアクセスログを眺めていると、
BYPASS MISS EXPIRED のみで、HITが殆どない。
トップ頁、アーカイブリストの頁ではHIT、
個別投稿頁では、BYPASS MISS EXPIRED ばかりでHITがない。
Kusanagi fcache on
とすると、fcache は有効になったかのように思えるが、本当にキャッシュが効いているのかどうかはログで確認しないとわからない。
まず、Wordpressの編集画面にログインした状態で自分のサイトにアクセスすると、キャッシュ機能を無視してBYPASS する。
BYPASS とは、例えキャッシュが既に存在したとしても、そのキャッシュを表示せずに、新規で頁を生成してから表示する。
そしてその頁はキャッシュされない。キャッシュは更新されない。
既に存在するキャッシュファイルは依然として変更されないまま。
それで、他のブラウザーでアクセスしてみる。
管理画面にログインしていないので、キャッシュにHITするはずだが、やはり、MISS EXPIRED ばかりになる。
/etc/nginx/conf.d/ssl-myname-com.conf
の server{ } 内、最下部を次のように編集した。
fastcgi_ignore_headers Cache-Control Expires Set-Cookie Vary; fastcgi_cache wpcache; fastcgi_cache_key "$device:$request_method:$scheme://$host$request_uri"; fastcgi_cache_valid 1440m; fastcgi_cache_valid 404 1m; fastcgi_no_cache $do_not_cache; fastcgi_cache_bypass $do_not_cache;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie Vary;
のみで、キャッシュがヒットするようになるはず。
fastcgi_cache_valid は、初期設定では10分と短いのでこれを長くする。
fastcgi_cache wpcache;
#fastcgi_cache xxxx-cache-directory
は、ドメイン毎にディレクトリを分けるのも良い。
その際には次のように /etc/nginx.conf の http{ } 内に別のディレクトリを指定する。
fastcgi_cache_path /var/cache/nginx/wordpress levels=1:2 keys_zone=wpcache:60m max_size=5120M inactive=10080m; # fastcgi_cache_path /var/cache/nginx/xxxx-cache-directory levels=1:2 keys_zone=xxxx-cache-directory:30m max_size=5120M inactive=1440m;
管理画面にログイン中でもキャッシュにHITさせるには、
set $do_not_cache 1;
を0 に変更すればよい。
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $do_not_cache 0;
}