SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【WordPress】Apacheのmod_cacheで高速化する

問題

mod_cacheを使って、WordPressを高速化したいです。

できますか。

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 を常駐させる方法もある。

関連するメモ

コメント