この記事ではKUSANAGIの最大の特徴であるキャッシュ機能(bcacheとfcache)について解説しています。
丁寧に作ったのでこの記事をブックマークして、キャッシュの導入や設定でつまづいた時に読み返してみてください。
bcacheとは
bcacheとは、block cacheの略で動作はWordPress内のKUSANAGIプラグインが行っています。
仕組みとしては、WordPressのページキャッシュプラグイン(WP Super CacheやWP Super Cache等)と似ています。
キャッシュ有効時、まずアクセスがあると、そのページのHTML(キャッシュデータ)がデータベースに保存されます。
(キャッシュデータはwp_site_cacheというテーブルに入っています。)
そして次回以降は、テーマファイルが読み込まれる前にデータベースから取得したキャッシュデータを表示してプログラムを終了しています。
キャッシュが効いていると、テーマファイルが読み込まれないため高速化できるというわけです。
fcacheとは
fcacheとは、FastCGI Cacheの略で動作はサーバー(Nginx)が行っています。
仕組みとしてはbcacheと似ているのですが、大きな違いはキャッシュデータをサーバーに保存している点です。
まず初回アクセス時に、そのページのHTML(キャッシュデータ)がサーバーに保存されます。
(キャッシュデータは/var/cache/nginx/wordpressディレクトリにmd5でハッシュ化されたファイル名で保存されています)
そして次回以降は、アクセスがあるとサーバーに保存されたキャッシュが返されます。
この場合、WordPressにすらアクセスしないためbcacheより高速にページが表示されます。
bcacheの使い方
bcacheを有効にする
デフォルトではbcacheはOFFになっています。

管理画面の「KUSANAGI」→「ページキャッシュ」の画面に行くと
「ページキャッシュは有効になっていません。有効にするには、仮想サーバのコンソール上で、 kusanagi bcache on と入力してください。」
とメッセージが表示されていますので、コマンドからbcacheを有効化しましょう。
- まずSSHでログインします。
__ ____ _______ ___ _ _____ __________ / //_/ / / / ___// | / | / / | / ____/ _/ / ,< / / / /\__ \/ /| | / |/ / /| |/ / __ / / / /| / /_/ /___/ / ___ |/ /| / ___ / /_/ // / /_/ |_\____//____/_/ |_/_/ |_/_/ |_\____/___/ Version 8.5.2-2, Powered by Prime Strategy.
sudo su -
コマンドでrootユーザーに昇格します。sudo su - 最終ログイン: 2021/07/12 (月) 18:13:31 JST日時 pts/0
パスワードを求められたら入力してください。
kusanagi target
で現在のプロファイルを確認kusanagi target nullnull.dev 完了しました。
bcacheを有効化したいプロファイルになっていない場合は、
kusanagi target [profile name]
でプロファイルを変更しましょう。kusanagi target nullnull.dev ターゲットはnullnull.dev に変更されました。 完了しました。
- 設定を確認
bcacheを有効化する前に現在のKUSANAGIの設定を確認してみましょう。
kusanagi status
と入力すると現在の設定を確認できます。kusanagi status Profile: nullnull.dev FQDN: nullnull.dev Type: WordPress KUSANAGI Version 8.5.2-2 aws *** (active) nginx *** ● nginx.service - The NGINX HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since 木 2021-07-08 10:03:28 JST; 5 days ago *** (active) php7-fpm *** ● php7-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php7-fpm.service; enabled; vendor preset: disabled) Active: active (running) since 木 2021-07-08 10:03:27 JST; 5 days ago *** (active) MariaDB *** ● mariadb.service - MariaDB 10.3.30 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled) Active: active (running) since 木 2021-07-08 10:03:28 JST; 5 days ago *** ruby *** KUSANAGI Ruby is not installed yet *** add-on *** *** Cache Status *** bcache off fcache off *** WAF *** off *** SELinux *** off 完了しました。
Cache Statusの項目でbcache、fcache共にoffになっていることがわかります。
kusanagi bcache
でbcacheの設定だけ確認することもできます。kusanagi bcache bcache は無効です 完了しました。
- bcacheの有効化
kusanagi bcache on
でbcacheを有効化しましょう。kusanagi bcache on onにします。 完了しました。
念の為、KUSANAGIの設定画面も見てみます。
有効化する前に出ていた「ページキャッシュは有効になっていません。有効に…」というメッセージが消えていれば問題ありません。

もし、このメッセージがまだ消えていない場合は、手動で有効化する必要がありますのでwp-confg.phpを開いて79行目当りにある#define('WP_CACHE', true);
の先頭の#
を削除して保存してください。
これで先程のメッセージは消えるはずです。
bcacheの設定
有効化できたら次はbcacheの設定を行いましょう。
設定は全て管理画面から行います。
キャッシュの有効時間
まず管理画面の「KUSANAGI」→「ページキャッシュ」の画面を開いてください。
上から「トップページ」「アーカイブ」「記事詳細」と数字を入力するフォームが3つあります。

これはキャッシュの有効期間を何分にするかの設定です。
デフォルトでは60分、60分、360分になっています。
デフォルトのままでも良いですし、サイトの構成によってはもう少し長めに取っても良いでしょう。
キャッシュ除外URL

ここにはキャッシュさせたくないページのURLパターンを入力します。
例えばhttps://example.com/test1/
というページを除外したい場合は/test1/
、カテゴリーページを全てキャッシュさせたくない場合は/category/.+
のように入力すれば良いです。
パターンには正規表現が使え、複数指定する場合は1行ずつ改行して入力してください。
頻繁に更新されるページやPHPでアクセス毎にランダムに出力内容を変えているページ等を指定すると良さそうです。
キャッシュするクエリ文字列

独自のクエリ付きのページもキャッシュさせたい場合は、このフォームにクエリのキーを入力します。
WordPressのデフォルトクエリは設定されていますので不要です。
例えば、https://example.com/?custom_test=1
というページをキャッシュさせたい場合、custom_test
と入力すれば良いです。
複数指定する場合は1行ずつ改行して入力してください。
記事公開時に削除するキャッシュの範囲

新しい記事を公開してもキャッシュが残っていればトップページへ反映されません。
そこでこの設定が役に立ちます。
記事公開時にキャッシュを削除したいページを選びましょう。
デフォルトでは「削除しない」になっています。
ちなみにこの設定は予約投稿した記事が公開された際にも実行されます。
advanced-cache.phpの再生成

上記の設定をしたあとは必ず「advanced-cache.phpを生成する」ボタンを押してadvanced-cache.phpを再生成してください。
この作業を行わないと設定が反映されないことがあります。
bcacheの効果確認
bcacheの設定が終わったら、次は実際にページがキャッシュされるか確認してみましょう。
まず、管理画面にログインしていない状態でトップページにアクセスしてください。
これでキャッシュデータが生成されるはずです。
どのページがキャッシュされているのかはコマンドで確認することができます。
bcacheを有効化するときと同じ手順でSSHでログインし、rootユーザーになってください。
そして次のコマンドを実行します。
kusanagi bcache clear '\|/$' --dryrun
kusanagi bcache clear '\|/$' --dryrun
キャッシュをクリアします。
INFO: |https|nullnull.dev|/ cache will be deleted
完了しました。
INFO: |https|nullnull.dev|/ cache will be deleted
と表示されているのでトップページがキャッシュされていることがわかります。
先程のコマンドが何をしているのかは次項の「bcacheを削除する」で詳しく説明します。
また、キャッシュファイルはデータベースを見ても確認することができます。
データベースにアクセスしてwp_site_cacheというテーブルを開いてください。

typeカラムにfront、device_urlカラムにトップページのurlが入っているので、トップページのキャッシュデータが作成されていることが確認できます。
該当ページがキャッシュから返されているかはHTTP レスポンスヘッダで確認することも可能です。
bcache無効時x-b-cache: BYPASS
bcache生成時x-b-cache: create
bcacheヒット時x-b-cache: cache
bcacheを削除する
最後にbcacheを削除する方法を解説していきます。
bcacheを削除する方法は2つ。
コマンドから行う方法とWordPressの管理画面から行う方法があります。
まずは、コマンドから行う方法について説明します。
SSHでログインし、rootユーザーになってください。
そして、次のコマンドを実行するとトップページのbcacheが削除されます。kusanagi bcache clear '|/$'
kusanagi bcache clear '\|/$'
キャッシュをクリアします。
SUCCESS: |https|nullnull.dev|/ cache could be deleted
完了しました。
ここでbcacheの削除コマンドの解説したいと思います。
まずkusnagi bcache clear
は全てのbcacheを削除するコマンドになります。
複数サイトがあれば全てのサイトの全てのbcacheを削除します。
そしてkusnagi bcache clear '|/$'
はトップページのみ削除するコマンドになります。
シングルクォーテーションで囲った部分にはパスを指定します。
パスを指定することで削除対象をターゲットプロファイルに絞ることができます。(パスには正規表現が使えます)
最後に前項で実行したkusnagi bcache clear '|/$' --dryrun
ですが、
これは削除対象URL(この場合はトップページ)を確認するコマンドになります。
最後に--dryrun
をつけると削除対象URLの事前確認が行えます。
ですので慣れないうちは、--dryrun
オプションを付けて事前確認を行った後に削除する、という流れで行うと良いと思います。
余談ですが、dryrunは予行演習、空運転、リハーサルというような意味を持ちます。
次は、管理画面から削除する方法について説明します。
まず管理画面にログインし、「KUSANAGI」→「ページキャッシュ」の画面にいきます。
ページ下部に「キャッシュのクリア」という項目がありますので、すぐ下にある「すべて」をクリックしてみましょう。

これでbcacheが全て削除されます。
ページごとにキャッシュを削除したい場合は、管理画面にログインした状態でキャッシュを削除したいページを開いてください。
管理バー(ツールバー)の右側に「cache clear」という項目がありますので、それをクリックすると表示中のページのbcache(fcacheも)が削除されます。

bcacheの使い方については以上になります。
fcacheの使い方
fcacheを有効にする
デフォルトではfcacheはOFFになっています。
ONにするにはコマンドから行う必要がありますので、SSHでログインし、rootユーザーになってください。
そしてkusanagi target
で現在のプロファイルを確認し、問題がなければkusanagi fcache
でfcacheの設定も確認します。
ここまではbcacheの設定手順とほぼ同じです。
そして、kusanagi fcache on
でfcacheを有効化します。
kusanagi fcache on
onにします。
Nginxを使用します。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
完了しました。
念の為、fcacheがきちんと有効化されているかconfigファイルを見て確認してみましょう。
まず、cd /etc/nginx/conf.d
で各プロファイルのconfigファイルがあるディレクトリに移動します。
そしてll
コマンドでディレクトリの中身を確認します。
ll
合計 32
-rw-r--r--. 1 root root 329 5月 26 19:15 _http.conf
-rw-r--r--. 1 root root 894 5月 26 19:15 _ssl.conf
-rw-r--r--. 1 root root 56 5月 26 19:15 kusanagi_naxsi_core.conf
-rw-r--r--. 1 root root 3699 7月 13 13:56 nullnull.dev_http.conf
-rw-r--r--. 1 root root 4883 7月 13 13:56 nullnull.dev_ssl.conf
-rw-r--r--. 1 root root 725 5月 26 19:15 psol.ini
-rw-r--r--. 1 root root 128 5月 26 19:15 security.conf
[profile_name]_http.conf
、[profile_name]_ssl.conf
というファイルが2つあるのが確認できます。
前者は非ssl化、後者はssl化の場合の設定ファイルです。
当サイトはSSL化しているので[profile_name]_ssl.conf
をviコマンドで確認します。
vi nullnull.dev_ssl.conf
...
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
#include shib_fastcgi_params;
#include shib_clear_headers;
limit_req zone=one burst=10 nodelay;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffers 256 128k;
fastcgi_buffer_size 128k;
fastcgi_intercept_errors on;
fastcgi_read_timeout 120s;
set $do_not_cache 0; ## page cache
set $device "pc";
if ($request_method = POST) {
set $do_not_cache 1;
}
129行目辺りにdo_not_cache
という変数がセットされていますが値が0になっていればfcacheが有効化されていますので、ZZ
でファイルを閉じましょう。
もし、値が1
だった場合はfcacheはOFFのままですので、i
でインサートモードにし、 do_not_cache
の値を0
から1
に書き換えます。
そしてesc
でインサートモードを終了し、:wq
コマンドで上書き保存してください。
ファイルを編集したら設定を反映させるためにkusanagi restart
コマンドを叩いてNginxを再起動しましょう。
これでfcacheの有効化は完了です。
fcacheの設定
fcacheの設定は特に変更せずとも利用できますが、この項目では需要がありそうなキャッシュの有効時間の設定のみ解説します。
まず、vi /etc/nginx/nginx.conf
でnginx.confファイルを開いてください。
vi /etc/nginx/nginx.conf
...
brotli on;
brotli_static on;
brotli_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;
brotli_comp_level 3;
brotli_min_length 1024;
open_file_cache max=100000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
fastcgi_cache_path /var/cache/nginx/wordpress levels=1:2 keys_zone=wpcache:30m max_size=512M inactive=600m;
fastcgi_ignore_headers "Vary" "Cache-Control" "Expires";
include /etc/nginx/conf.d/*.conf;
}
58行目辺りのfastcgi_cache_path
から始まる行でキャッシュファイルの保存場所やキャッシュの有効時間などを決めています。
この行の一番右側にinactive
というキーがありますのでその値を変更するとキャッシュの有効時間が変わります。
初期値は600m(600分)になっています。
指定方法ですが、10分なら10m、2時間なら2h、2日なら2dというように指定します。
設定を変更したらkusanagi restart
を忘れずに行いましょう。
fcacheの効果確認
bcacheと同様にfcacheの有効化・設定が終わったら、次は実際にページがキャッシュされるか確認してみましょう。
まず、管理画面にログインしていない状態でトップページにアクセスしてください。
(可能であればスマホ、タブレットからもアクセスしましょう。ブラウザのデベロッパーツールでUAを変えてアクセスしてもいいです。)
これでキャッシュファイルが生成されるはずです。
どのページがキャッシュされているのかはコマンドで確認することができます。
手順はbcacheの時とほぼ同じです。
まずでSSHでログインし、rootユーザーになってください。
そして次のコマンドを実行します。
kusanagi fcache clear '/$' --dryrun
kusanagi fcache clear '/$' --dryrun
INFO: pc:GET:https://nullnull.dev/ will be deleted
INFO: smart:GET:https://nullnull.dev/ will be deleted
INFO: tablet:GET:https://nullnull.dev/ will be deleted
完了しました。
fcacheのキャッシュファイルはUA(ユーザーエージェント)ごとに作られるので、pc、tablet、smartと3つキャッシュファイルが生成されていることが確認できました。
bcacheと同様にHTTP レスポンスヘッダで確認することも可能です。
(bcacheの場合と値が少し異なるので注意が必要です)
fcache無効時x-b-cache: BYPASS
fcache生成時x-f-cache: MISS
fcacheヒット時x-f-cache: HIT
fcacheを削除する
最後にfcacheを削除する方法を解説します。
手順はbcacheの時とほぼ同じです。
まずSSHでログインし、rootユーザーに昇格します。
そして次のコマンドを実行するとトップページのキャッシュが削除されます。
kusanagi fcache clear '/$'
kusanagi fcache clear '/$'
SUCCESS: pc:GET:https://nullnull.dev/ cache could be deleted
SUCCESS: smart:GET:https://nullnull.dev/ cache could be deleted
SUCCESS: tablet:GET:https://nullnull.dev/ cache could be deleted
完了しました。
bcacheの時と同様に、管理画面にログインした状態で削除したいページを表示、管理バー(ツールバー)右側の「cache clear」を押すことでも削除できます。
※ちなみに、管理画面にログイン中はbcache、fcache共に効かないようになっています。
以上で、「詳解!KUSANAGIキャッシュ講座」は終了です。