今回は、YASAKANI Cacheをさらに高速にして、かつゼロデイ攻撃をブロックすることが出来る最速最強なエキスパートモードを設けましたので紹介します
YASAKANI Cache は SQLite を活用したページキャッシュプラグインで、他の有名なキャッシュプラグインに勝るとも劣らない最速レベルのキャッシュを実現しています
WordPress Plugin : YASAKANI Cache
WordPress キャッシュプラグインの仕組み上これ以上の高速化はちょっと難しいかなと思っていたのですが、PHP には auto_prepend_file という、指定したファイルを一番最初に読み込む機能があることを知り、WordPress プラグインとしてはちょっとイレギュラー対応とはなりますが最速のキャッシュを実現できるかもと思い対応してみました (^^)
エキスパートモード
auto_prepend_file を使うとPHPプログラムを呼び出すときは、常に一番先に読み込まれるようになるので PHP プログラムとしては本当に一番先に実行することが出来ます
例えば、ユーザーがサイトのホームページを見ようとリクエストしたとします。すると通常はホームの index.php が一番先に処理されるプログラムとなるように設定されているのですが、auto_prepend_file として xxxxx.php が設定されていれば index.php より先に xxxxx.php が実行されるようになります
php.ini に auto_prepend_file を設定
YASAKANI Cache のキャッシュを有効化すると通常は次のような表示となります
ページキャッシュの設定表示は 有効 と表示されている状態です
エキスパートモードにするには、この画面に表示されている auto_prepend_file = “xxxxx” という文字列をサーバーの php.ini ファイルに追記してから Webサーバーをリロードして反映させます
正常に設定されれば以下のように自動的に動作モードが エキスパートモード と表示されます
auto_prepend_file の設定は、php.ini や .htaccess 等で行うことが出来るのですが、環境によっては使えないこともあります( 500 Internal Server Error
等のエラー)、また、使い方にも注意しないとサイトにアクセスできなくなったなんてことが割と簡単に起きてしまいます。
今回はより多くの環境で使えると思われる php.ini を手動で編集するのが一番安全に設定できると思い、エキスパートモードとして php.ini ファイルを手動で編集して、指定された auto_prepend_file を記述すれば動作するように致しました
※php.ini へ auto_prepend_file を記述した後に、これを有効にするには Webサーバーをリロードする必要があります
設定にはひと手間かかるし、レンタルサーバー等の環境によっては使用できない場合もあるのですが、php.ini を編集することが可能なら試してみて下さい
php.ini の編集ができない場合でも、環境によっては .htaccess や .user.ini ファイルを使って設定できる場合もありますので このあたりのサポートフォーラムのトピックを参考にしてみて下さい
エキスパートモードの2つのメリット
auto_prepend_file を使うと2つのメリットがあります
最速レスポンス
auto_prepend_file の使用で、どのくらいの効果があるかといえば、waiting(TTFB)時間が 1~2ms ぐらい速くなるだけなのでほとんど気が付かないレベルです
元々が高速なので、そこからの 1~2ms って結構大きいのでかなり満足しているのですが…
まあ、皆さんの中にもスピード大好きっていうこだわり派の方もいらっしゃるので、他の有名なキャッシュプラグイン等と比較してみて下さい。頭一つ抜き出せたかなと思っています (^^)
とりあえずタイプ別に設定を紹介しておきます
タイプ | ページキャッシュ | HTML/CSS/JS | ログ | セキュリティ機能 |
簡単にページキャッシュを試してみたいお手軽派 | 通常モード | 全て無効 | 無効 | 無効 |
スピードこだわり派 | エキスパートモード | 全て有効 | 無効 | 無効 |
スピード&セキュリティどっちも派 | エキスパートモード | 全て有効 | ログ+統計情報 | 有効 |
お勧めは、スピード&セキュリティどっちも派 の設定です。ログや統計情報の保存処理を伴うので若干遅くなりますが、ボットをブロックしたり、ブルートフォースやPHPへのゼロデイ攻撃の防御も行えるようになるのでトータルで考えれば一番優れた設定となります
CSS,JSを非同期ロードするとレンダリングブロックによる遅延を最小限にして高速化することが出来ます
HTML縮小化と CSS, JS を非同期ロード機能は、お使いのテーマやプラグインによってはエラーとなる場合がありますので、十分確認のうえでご利用下さい
最強セキュリティ(ゼロデイ攻撃防御)
auto_prepend_file を使う本当の狙いはセキュリティの向上です。最速よりもこちらのほうのメリットが大きいです
WordPress では、プラグインやテーマの脆弱性のあるPHPへのダイレクトアクセスを通常はブロックすることは出来きないので、WAFや .htaccess を使用してブロックすることが多いのですが、auto_prepend_file を使ってもブロックすることが出来ます
auto_prepend_file を使うとPHPへのダイレクトアクセスが行われた時にどのPHPがアクセスされたかを調べることが可能になるので、プラグインやテーマ内のPHPファイルをダイレクトにアクセスされた場合に不正なアクセスとしてブロックすることが出来るようになります
ただ、wordpress は、通常の運用において wp-login.php や他にもいくつかのダイレクトアクセスが行われるPHPファイルがありますので、それらへのアクセスはブロックしないようにする必要があります
また、ログインユーザーがダッシュボードを表示して管理操作等を行うときには wp-admin 領域にある様々な PHPへもダイレクトアドレスが行われますので、ログインユーザの wp-admin 領域へのダイレクトアクセスは全て許可しています(セキュリティ的には甘くなりますが使い勝手を優先)
日本語環境では以下のPHPファイルへのダイレクトアクセスを許可してあります
- /index.php
- /wp-login.php
- /wp-signup.php
- /wp-activate.php
- /wp-mail.php
- /wp-comments-post.php
- /wp-trackback.php
- /wp-cron.php
- /xmlrpc.php
- /wp-admin/admin-ajax.php
- /wp-admin/load-scripts.php
- /wp-admin/load-styles.php
- /wp-content/plugins/wp-multibyte-patch/wplink.php
これ以外に、ダイレクトアクセスを許可する PHP ファイルがある場合には、設定画面からホワイトリストへ登録することでアクセスできるようになります
※許可されているPHPファイル以外のダイレクトアクセスはブロックされるようになるので、 WordPress 環境においてはPHPへのゼロデイ攻撃に対しかなり強固になります。ただしセキュリティに絶対はありませんので安心は禁物です
この機能は下記記事を参考に実装しました
PHPスクリプトファイルアップロード攻撃を防止する方法
プラグインの使用を止める場合
プラグインをアンインストールしても php.ini の auto_prepend_file の記述と /wp-content 下の yasakani-cache-exload.php ファイルは残ったままとなっています
ただ、使わないのに無駄な設定が残っているのが気になる方は、以下の手順に沿ってプラグインのアンインストールを行ってください
- YASAKANI Cache プラグインを停止してアンインストール
- php.ini ファイルを編集して auto_prepend_file 部分を削除
- Webサーバーをリロードして正常にサイトアクセスできることを確認
- FTP等で /wp-content 下の yasakani-cache-exload.php ファイルを削除
以上
エキスパートモードは、とても強力な2つのメリットがありますので、php.ini ファイルの編集が可能ならぜひ試してみて下さい
有名ではないけど、最速最強なキャッシュプラグインを紹介しました (^_-)-☆