WordPress高速化: WP Super Cacheの導入

新幹線

前回はnginxとphp-fpmのパラメータを調整して高速化を検討してみました。

しかし、すでにボトルネックはPHPおよびMySQLの処理で、Webサーバだけを高速化してもいかんともしがたくなってきました。

そこで今回はWP Super CacheというWordPressのプラグインを導入して、高速化に挑戦します。

WP Super Cache
Developer: various
Price: Free

不要なプラグインの無効化

wp-super-cacheを導入する前にほかにキャッシュ系のプラグインを使っている場合は無効にします。

私の場合は「DB Cache Reloaded Fix」というプラグインを導入していたので、無効化しておきました。

WP Super Cacheのインストール

WP Super CacheはWordPressのダッシュボードからインストールできます。

プラグインメニューの新規追加を選び、「WP Super Cache」でキーワード検索をするとでてきます。あとは「いますぐインストール」を選びます。インストールが完了したら「プラグインを有効化」します。

しかし次のようなメッセージが出ました、WP Super Cacheは有効にするだけでは動作せず、設定が必要なようです。

WP Super Cacheインストール後

WP Super Cacheの設定

WP Super Cacheの管理ページを開いたらいきなりエラーが表示されました。

インストール後のエラー

エラーはwp-config.phpファイルにWPCACHEHOMEという変数が定義されていないことと、advanced-cache.phpというファイルがないという2点のようです。

WPCAHCEHOMEの設定

エラーメッセージには/usr/share/wordpress/wp-config.phpにWPCACHEHOMEを設定しろという風に書いてありますが、Debianではここにあるwp-config.phpファイルは変更せず/etc/wordpressにあるconfig-サイト名.phpファイルを変更する仕組みなっています。

そこで、config-scratchpad.jp.phpに次の行を追加しました(最後ではなく途中に追加します)。

define('WPCACHEHOME', '/usr/share/wordpress/wp-content/plugin/wp-super-cache/');

ルートで編集するとファイルの所有者が変わってしまうことがあるので修正しておきます。

sudo chgrp www-data /etc/wordpress/config-scratchpad.jp.php

advanced-cache.phpの作成

このファイルは/usr/share/wordpress/wp-content/plugins/wp-super-cacheにありますので、これをコピーして使います。

cd /usr/share/wordpress/wp-content/
sudo cp plugins/wp-super-cache/advanced-cache.php .
sudo chown www-data.www-data advanced-cache.php

ここまできてWP Super Cacheの管理ページを開くと・・・まだエラーがでます。

WP_CACHEのエラー

WP_CACHEの設定

WPCHACHEHOMEの場合と同様に/etc/wordpressにあるconfig-サイト名.phpを変更します。WPCACHEHOMEを定義した次の行に下記を追加します。

define(‘WP_CACHE’, true);

ルートで編集するとファイルの所有者が変わってしまうことがあるので修正しておきます。

sudo chgrp www-data /etc/wordpress/config-scratchpad.jp.php

これでWP Super Cacheの管理ページが開けるはずです。

WP Super Cacheの設定

最初にいくつか設定しておいたほうが良い項目があります。

タブから「プラグイン」を選ぶといくつかのラジオボタンが表示されます。

プラグイン

私は複数のドメインを使ってマルチサイトにしているのでドメインマッピングを有効にしました。

ドメインマッピング

また、WP Touchを使っているのでWP Touchも有効にします。

WPTouch

そして「簡易」タブに戻り、キャッシングを有効にします。

簡易

キャッシング

nginxの設定

WP Super Cacheを有効にしたときはnginxの設定も変える必要があります。

具体的には/etc/nginx/globalにあるwordpress-ms.confでwordpress-ms-wp-super-cache.confを読み込ませるようにします。

include global/wordpress-ms-wp-super-cache.conf;

なおwordpress-ms-wp-super-cache.confの中身は下記の通りです。この内容を/etc/nginx/sites-availableにあるファイルに書いても効果は同じだと思います。

# WP Super Cache rules.
# Designed to be included from a 'wordpress-ms-...' configuration file.

# Enable detection of the .gz extension for statically compressed content.
# Comment out this line if static gzip support is not compiled into nginx.
gzip_static on;

set $supercacheuri "";
set $supercachefile "$document_root/wp-content/cache/supercache/${http_host}${ur
i}index.html";
if (-e $supercachefile) {
set $supercacheuri "/wp-content/cache/supercache/${http_host}${uri}index.htm
l";
}

# If this is a POST request, pass the request onto WordPress.
if ($request_method = POST) {
set $supercacheuri "";
}

# If there is a query string, serve the uncached version.
if ($query_string) {
set $supercacheuri "";
}

# Logged in users and those who have posted a comment get the non-cached version.
if ($http_cookie ~* comment_author_|wordpress_logged_in|wp-postpass_) {
set $supercacheuri "";
}

# Mobile browsers get the non-cached version.
# Wastes CPU cycles if there isn't a mobile browser WP theme for the site.
if ($http_x_wap_profile) {
set $supercacheuri "";
}

if ($http_profile) {
set $supercacheuri "";
}

if ($http_user_agent ~* (2.0\ MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800)) {
set $supercacheuri "";
}

if ($http_user_agent ~* (w3c\ |w3c-|acs-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-|dang|doco|eric|hipt|htc_|inno|ipaq|ipod|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-|lg/u|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sams|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|wap-|wapa|wapi|wapp|wapr|webc|winw|winw|xda\ |xda-)) {
set $supercacheuri "";
}

# Stop processing if the supercache file is valid.
if ($supercacheuri) {
rewrite ^ $supercacheuri break;
}

ここまでできたらnginxに新しい設定ファイルを読み込ませます。

sudo /etc/init.d/nginx reload

WP Super Cacheの微調整

もう一度WP Super Cacheの管理ページに戻り、「詳細」タブで推奨となっているオプションを選択しておきます。

私は下記を追加で選択しておきました。

  • ページを圧縮し、訪問者により速くページを供給する。 (推奨)
  • 304 Not Modified ブラウザーキャッシング。最後にリクエストされてから変更がないことを示す。 (推奨)
  • 既知のユーザー向けにはページをキャッシュしない。 (推奨)
  • 追加のホームページチェック。(非常にまれにホームページのキャッシングを止めることがあります) (推奨)

まとめ

いろいろとやることがありましたが、ようやくWP Super Cacheプラグインの設定が完了しました。

次回は再び速度を測ってみたいと思います。