【WordPress】Apacheのmod_cacheで高速化する
問題
mod_cacheを使って、WordPressを高速化したいです。
できますか。
答え
利用することは可能。
mod_cacheを使うと、運用時にいろいろと気を遣う必要は出てくる。
- 投稿を編集しても、キャッシュが更新されるまで、即座に反映されない。
- 編集中に、うっかり記事のパーマリンクにアクセスすると、キャッシュが作成される。
- 編集中の内容を確認するときは必ずプレビューで。
など。
そのあたり承知の上で適用するのなら、かなり高速化するのでとても良い。
1、WordPress側の対応(重要)
WordPressが作成するパーマリンクの設定(.htaccessのrewriteの設定)は、mod_cacheに適していない。
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
mod_cache は、rewrite後のURLでキャッシュを作るので、すべてのリクエストが /index.php にrewriteされると、リクエストされたURLごとにキャッシュを作れない。(最初にアクセスされたページのキャッシュが /index.php のキャッシュとなり、すべてのページの表示がこの内容になる)
URLペースのキャッシュであるmod_cacheをを利用するなら、以下のように、rewrite後のURLがすべて同じにはならないようにする。
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php/$1 [L] </IfModule>
2、Apache側の設定
mod_cacheの設定は特に難しくない。VirtualHostの中などに、以下の記述を追加する。
CacheIgnoreCacheControl On CacheIgnoreNoLastMod On CacheIgnoreHeaders Set-Cookie CacheEnable disk / CacheRoot /var/cache/mod_cache #CacheLock On #CacheLockMaxAge 15 #CacheLockPath /tmp/mod_cache
WordPressが一番上の階層に設置してあるなど、Webサイト全体でキャッシュが有効でよかったら、CacheEnable disk /
で。WordPressがあるディレクトリの下に設置してあるなどの場合は、CacheEnable disk /blog
など、パスを指定。
CacheRoot はキャッシュが作られる場所。Apache実行ユーザーが書き込める場所を用意してあげる。
CacheLock On
は、意味が分かるなら、必要なら、コメントを外して有効にする。
設定に問題ないことを確認して、
# apachectl -t Syntax OK
Apache再起動。
# service httpd restart
もしくは
# service httpd graceful
3、キャッシュの定期的な削除
キャッシュの削除は htcacheclean。
cronで削除するなら以下のような設定で。
# 毎時0分に、100MB以下になるように、キャッシュ削除を実行 0 * * * * /usr/sbin/htcacheclean -r -l 100M -p /var/cache/mod_cache
※htcacheclean を常駐させる方法もある。
コメント