WordPressのカスタマイズやテーマファイル、プラグインの作り方などデータベース構造から詳しく解説します。

WordPressとApacheのmod_cache

Apacheでキャッシュを設定出来る、mod_cacheモジュール。WordPressの高速化のために、手動でmod_cacheを設定してキャッシュを行おうと思ったのですが、ハマってしまったのでその対策をご紹介します。

mod_cacheとは

mod_cacheとはApacheのモジュールの1つで、HTTPリクエストに対するレスポンス内容をレスポンスヘッダーとHTMLの2つの静的ファイルとして保存します。
これにより、同一URLへのリクエストがキャッシュ保存期間内に送られた場合、前回生成したファイルをそのまま送り返すことで再度データベースからデータを読み込んでHTMLを生成する手間を省く事ができ、レスポンス速度の向上とサーバー負荷の軽減を期待出来ます。

WordPressの表示ロジック

WordPressのデフォルトのパーマリンク設定では

http://www.example.com?p=post_id

のような形式となります。つまり、index.phpに対してGETクエリとして記事IDを渡し、WordPressはindex.phpの中で受け取ったクエリに応じて処理を行い、最後に展開するテンプレートファイルを選択してHTMLを生成します。参考リンク
ここで、ポイントとなるのは、パーマリンクの設定を変更してもWordPressは内部的にURLを解析してindex.php?という形式に変換するということです。
つまり、どのようなURLにアクセスしても必ず最初にindex.phpが呼び出されるのです。

mod_cacheでWordPressのサーバーキャッシュは困難

mod_cacheの仕組みと、WordPressの仕組みを理解した上で、WordPressでmod_cacheは利用できるかどうかを検討してみましょう。
私が設定してテストをしたところ「URLへのリクエストは通るが、表示されるHTMLが同じままである」という現象が発生しました。
つまり、トップページに遷移したのち、他の投稿ページへ遷移する、そしてまた別の投稿ページへ遷移しようとすると、URLの遷移は問題なく行われるのですが表示内容が先ほど表示した記事ページのHTMLとなってしまうのです。
これはおそらく、WordPressが内部的に全てindex.php?という形式に変換してから処理を行うため、mod_cacheのキャッシュデータと実際に呼び出すHTMLが異なってしまう、という事態が発生しているのかと考えられます。
おなじindex.phpへのリクエストなので、前回index.phpが呼び出された際に生成したHTMLをレスポンスしてしまう、ということです。
おそらく、クエリの分岐処理など細かい設定を行う事でmod_cacheを利用する事は可能かとは思いますが、煩雑になりそうだったので私は使用をあきらめ、別の方法を利用しました。
※index.phpをキャッシュ対象から除外することで、設定できるかもしれません。

WP-Super-Cacheを使う

WP Super Cacheというプラグインを使う事で、サーバーキャッシュを利用する事が出来ます。
WP-Super-Cacheでは、WordPressの表示ロジックを踏まえた上でキャッシュデータを生成し、URLに応じて適切なキャッシュデータをレスポンスします。
WordPressでサーバーキャッシュを行う場合は、mod_cacheを手動で設定するのではなくWP Super Cacheプラグインの利用をお勧めします。

関連記事

ページ上部へ戻る