Bloody Mary - blog

Bloody Mary 別館

WP Super Cache に大はまり

WP Super Cache 0.9.6.1 ではまりました

WordPress のプラグインに WP Super Cache というものがある。このプラグインは動的なコンテンツである WordPress の記事をキャッシュし、あたかも静的なページであるかのように振舞う。 WP Super Cache は記事にアクセスがあると、特定のディレクトリにキャッシュファイルを作る。次回からはこのキャッシュを使って高速にページを表示するというわけだ。

このサイトもいつの間にかアクセス数が増えていたので、入れても損はないだろうと、早速インストールしてみることにした。

しかし、これほどハメられることになるとは、予想しなかった。「これほどってどれくらいよ?」という質問には、「丸 1 日は堅い」とお答えしよう。何故それほど時間がかかったかというと、 readme.txt を良く読まずに不精してしまったためである。まあ readme もさほど詳しく書かれているわけではないが…

超意訳 readme.txt

== Installation ==

1. Apache の mod mime と mod rewrite modules を有効にしましょう。
2. もう WP-Cache がインストール済みなら削除しましょう。

wp-config.php の WP_CACHE define も消しましょうか( 訳に自信なし )。
wp-content/wp-cache-config.php と wp-content/advanced-cache.php も消して、プラグインを無効にしましょう。

3. plugins/ ディレクトリに、解凍したディレクトリをアップしましょう。

wp-content/plugins/wp-super-cache/
のようなカンジになります。

4. WordPress で MU ( 何のことやら ) を使っているなら、 wp-content/mu-plugins/wp-super-cache/ にインストールする必要がありますよ。

wp-cache.php をコピーして mu-plugins のディレクトリにおきましょう。

5. WordPress のユーザはそのプラグインページで、「WP Super Cache」を有効にする必要があるでしょう。 ( さっぱり分からん )

MU プラグイン関係のことだと思うが。

6. 設定の「WP Super Cache」でキャッシュを有効にしてね。

エラーが表示されたら、一個ずつ解決してちょ。 FAQ とかも見てね。 ( 私の場合はそれ以前の問題だったが )

7. mod_rewrite のルールが .htaccess に書き込まれるから。書かれなければ自分で書いてね。

以下、 .htaccess の内容

8. プラグイン有効にした後 wp-content/cache/.htaccess が作られるから。自分で作らなくてもいいよ。でも作られないときは自分で書いてね。

以下、 .htaccess の内容

9. 「500 internal error」とか出たら、 httpd.conf の設定を変更するといいよ。

<Directory /home/www/>
AllowOverride All
</Directory>

10. wp-content/advanced-cache.php ができてれば OK と思うよ。

WordPress のディレクトリを変更していたりしたら、適当に調整してね。

はまった過程1

まず、 WP Super Cache を使う条件として、パーマリンク設定をしておく必要がある ( はずだ )。今まで「パーマリンク? そういえば初期設定でそんなのあったかな…」程度の認識でしかなかったので、これを変更するのにちょっと手間取った。

WordPress のデフォルトのアクセス URL は以下のようなものになる。
http://www.studio-soleil.com/bloody-mary/wordpress/?p=1126

これだと明らかに動的コンテンツだろうということで、以下のようなリンクに変更した。
http://www.studio-soleil.com/bloody-mary/wordpress/archives/1126.html

しかし、パーマリンク変更後に 404 Not Found のエラーでページが表示されない。

これは、ディレクトリに対して FollowSymLinks ( Apache の設定 ) が有効になっていないためだ。 .htaccess か httpd.conf で有効にする。これは問題ない。

はまった過程2

次にプラグインをインストールすることになったのだが、英語の readme を読むのが面倒で、つい不精して Google で日本語ページを検索してしまった。

この記事を書いている時点での最新バージョンが WP Super Cache 0.9.6.1 (Last Updated: 2009-7-29) である。ちなみに昨日は 0.9.6.0 だったのが、今日になったら 0.9.6.1 にアップデートしていた。
orz

これほどにピカピカのバージョンであるからして、検索して出てくるページは、当然ながら古い方法だ。これらのページには、解凍後に出てくるファイル wp-cache-config.php や advanced-cache.php を編集したり、 wp-content/ ディレクトリに移動したりしなさいと書かれてあるが、この作業は現行バージョンでは不要である。

むしろ、 advanced-cache.php を自分で移動させてしまったがために、一見インストールできているが、実はキャッシュされない等といった不具合に見舞われてしまったのである。

もちろん、このバージョンと同じやり方も載っていたところはあったが、逆に必要な部分 ( wp-config.php に記述しなければならない、とか ) がなくて分からなかった。

この advanced-cache.php が原因であると判明するまでに 1 日もかかってしまったわけだが、なにせ error_log にも原因が出ないのだ。どうにもならない。 error_log で原因が探せないものだから、本家 FAQ を虱潰しである。参ってしまう。

この影牢なみにひどいトラップに引っかかる人が少なくなるように、プラグインが有効になるまでの処理を書き留めておこうと思ったわけ。

WP Super Cache 0.9.6.1 のインストール

1. 前提条件

パーマリンク設定をデフォルト以外にしている必要がある ( たぶん )。
私の場合、「カスタマイズ」で「 /archives/%post_id%.html 」にしてある。

この設定をすることで、 /wordpress/.htaccess は次のようになるはずだ。

  1. # BEGIN WordPress
  2. <IfModule mod_rewrite.c>
  3. RewriteEngine On
  4. RewriteBase /bloody-mary/wordpress/  ※ 環境による
  5. RewriteCond %{REQUEST_FILENAME} !-f
  6. RewriteCond %{REQUEST_FILENAME} !-d
  7. RewriteRule . /bloody-mary/wordpress/index.php [L]
  8. </IfModule>
  9. # END WordPress

※ .htaccess の所有者を Apache:Apache にしておくこと。

※ /wp-content も同様に、 Apache:Apache 755 にしておく。この中に cache フォルダと設定ファイルが作られるので。

2. 解凍

wp-super-cache.0.9.6.1.zip を解凍してできたディレクトリ wp-super-cache を wordpress/wp-content/plugins/ にアップ。

たぶん不要だが、一応所有者を Apache のユーザにしておく。

# chown -R Apache:Apache plugins/wp-super-cache/
3. 設定ファイルについて

※ 設定後、 advanced-cache.phpwp-cache-config.phpwp-content/自動作成される。

wp-content/ ディレクトリの所有者/パーミッションを Apache:Apache 755 とかにしておいて、 Apache (PHP) から書き込みできるようにしておく。

# chown Apache:Apache wordpress/wp-content/
# chmod 755 wordpress/wp-content/

wp-config.php の編集を行なう。

# vi wordpress/wp-config.php

    // WP Super Cache Manager
    define('WP_CACHE', true);

 84 if ( !defined('ABSPATH') )  ※ この行より上に記述
4. プラグイン有効化

管理画面にログインしてプラグインを有効化すると、次のメッセージが表示される。

「WP Super Cache is disabled. Please go to the plugin admin page to enable caching.」
admin のリンクをクリックするか、設定メニューの「 WP Super Cache 」をクリック。

「ON WP Cache and Super Cache enabled」にチェック。
「Clear all cache files when a post or page is published. (This may significantly slow down saving of posts.)」にチェック。
「Update Status」のボタンで設定を保存する。

バックグラウンドで、以下のファイル/ディレクトリが自動作成される。

  • wp-content/cache
  • wp-content/wp-cache-config.php
  • wp-content/advanced-cache.php

※ この時点で、 /wp-content/advanced-cache.php と /wp-content/plugins/wp-super-cache/advanced-cache.php の二つのファイルがあるが、これで正解。両者微妙にサイズが異なる。

-rw-r--r--  1 Apache Apache 594 2009-07-30 19:22
    wp-content/advanced-cache.php
-rw-r--r--  1 Apache Apache 456 2009-07-30 02:37
    wp-content/plugins/wp-super-cache/advanced-cache.php

これのに気づくまでどれだけの時間をツイヤシタカ…

気を取り直して、「Update Status」を押した後は、画面が遷移してまた設定画面に戻るが、下にスクロールしていくと「Mod Rewrite Rules」という .htaccess の設定が表示されている。「Update Mod_Rewrite Rules >>」をクリックすると、 .htaccess が以下のように書き換わる。

wordpress/.htaccess
  1. # BEGIN WPSuperCache
  2. <IfModule mod_rewrite.c>
  3. RewriteEngine On
  4. RewriteBase /
  5. AddDefaultCharset UTF-8
  6. RewriteCond %{REQUEST_METHOD} !=POST
  7. RewriteCond %{QUERY_STRING} !.*=.*
  8. RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress|wp-postpass_).*$
  9. RewriteCond %{HTTP_user_agent} !^.*(Android|2.0\ MMP|240x320|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|hiptop|IEMobile|iPhone|iPod|KYOCERA/WX310K|LG/U990|MIDP-2.0|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|Playstation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|Windows\ CE|WinWAP).*
  10. RewriteCond %{HTTP:Accept-Encoding} gzip
  11. RewriteCond %{DOCUMENT_ROOT}/絶対パス/wordpress/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html.gz -f
  12. RewriteRule ^(.*) /絶対パス/wordpress/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html.gz [L]
  13.  
  14. RewriteCond %{REQUEST_METHOD} !=POST
  15. RewriteCond %{QUERY_STRING} !.*=.*
  16. RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress|wp-postpass_).*$
  17. RewriteCond %{HTTP_user_agent} !^.*(Android|2.0\ MMP|240x320|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|hiptop|IEMobile|iPhone|iPod|KYOCERA/WX310K|LG/U990|MIDP-2.0|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|Playstation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|Windows\ CE|WinWAP).*
  18. RewriteCond %{DOCUMENT_ROOT}/絶対パス/wordpress/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html -f
  19. RewriteRule ^(.*) /絶対パス/wordpress/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html [L]
  20. </IfModule>
  21.  
  22. # END WPSuperCache
  23.  
  24. # BEGIN WordPress
  25. <IfModule mod_rewrite.c>
  26. RewriteBase /bloody-mary/wordpress/  ※ 環境による
  27. RewriteCond %{REQUEST_FILENAME} !-f
  28. RewriteCond %{REQUEST_FILENAME} !-d
  29. RewriteRule . /bloody-mary/wordpress/index.php [L]
  30. </IfModule>
  31.  
  32. # END WordPress
wordpress/wp-content/cache/.htaccess
  1. # BEGIN supercache
  2. <IfModule mod_mime.c>
  3.   <FilesMatch "\.html\.gz$">
  4.     ForceType text/html
  5.     FileETag None
  6.   </FilesMatch>
  7.   AddEncoding gzip .gz
  8.   AddType text/html .gz
  9. </IfModule>
  10. <IfModule mod_deflate.c>
  11.   SetEnvIfNoCase Request_URI \.gz$ no-gzip
  12. </IfModule>
  13. <IfModule mod_headers.c>
  14.   Header set Cache-Control 'max-age=300, must-revalidate'
  15. </IfModule>
  16. <IfModule mod_expires.c>
  17.   ExpiresActive On
  18.   ExpiresByType text/html A300
  19. </IfModule>
  20.  
  21. # END supercache

※ Ktai Style を使う人は、 Ktai Style プラグインを有効にした後、「Mobile device support. 」にチェックをつけ、「Update Status」をクリックするだけで OK。

WP Super Cache 0.9.6 くらい?で対策されたためか、他のサイトで紹介されているようなややこしい手順は踏まなくても良い。 .htaccess を書き換える必要もない。

5. キャッシュの確認

ページを表示させ、管理画面の [ WP Super Cache ] – [ Cache Contents ] の項目に、以下のように表示されてればキャッシュファイルが作られている。

WP-Cache (97.23KB)
2 Cached Pages
0 Expired Pages

WP-Super-Cache (0KB)
0 Cached Pages
0 Expired Pages

Garbage Collection
Last GC was 00:50 minutes ago
Next GC in 09:10 minutes

WP Super Cache が思うように動作しないので、原因を調べていく過程で、本家サイトの Installation や Faq を英文で見る羽目になった。といっても私は英語が読めるわけではなく、感じるだけである。ふぃーる。

FAQ の項目を上から虱潰しにしていき、それでも見つからず、「 wp-content/advanced-cache.php が自動作成されるなら移動しなくてもいいんじゃね?」ということで削除して再設定したら 0 バイトのファイルが作られ、「移動しないなら元ディレクトリのやつがないのはおかしいかな」と再インストールしてみたらビンゴ。

結局、インストール自体はすごく簡単になったということだね。

急がば回ってみるのも一興か。

Updated: 2013/3/8 金曜日 — 8:50:11

8 Comments

Add a Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Bloody Mary - blog © 2008 - 2021