WPXレンタルサーバのキャッシュ動作の怪

WPXレンタルサーバのキャッシュが不思議な動作をしていたので、そのメモです。

このブログで使用しているWPXレンタルサーバーでは

  • キャッシュ(リバースプロキシ) に加え、
  • mod_PageSpeed

を使用することができます。

  • mod_PageSpeed では、
  • 画像の最適化・圧縮・リサイズ
  • CSS や JavaScript ファイルを連結、縮小、圧縮、またはHTML へのインライン化
  • キャッシュの有効期間の延長、ドメインシャーディング、ドメインの書き換え
  • JavaScript と画像の遅延ロード

といった機能が利用できます。

この WPXのキャッシュ と mod_PageSpeed の両方の機能を有効にした場合、暫くすると、mod_PageSpeed で行われている CSS や JavaScript の圧縮が解除?された状態になっている現象が発生しているので、状況を纏めておきます。

状況と現象

環境

  • サーバー:WPXレンタルサーバー
  • WordPressバージョン:4.2.1
  • テーマ:WordPressデフォルトの Twenty Fifteen v1.1
  • サイトの状況:新たにインストールした直後で、投稿や固定ページの変更なし、テーマや設定はデフォルトのまま

WPXキャッシュ:無効、mod_PageSpeed:無効

まず、WPXキャッシュ:無効、mod_PageSpeed:無効 の状態で PageSpeed Insights を計測した結果です。
「圧縮を有効にする」の項目に着目します。

0.抜粋_キャッシュなし-modPageSpeedなし

当然のことながら、mod_PageSpeed が無効なため、CSS や JS やその他のファイルについて指摘されています。

WPXキャッシュ:無効、mod_PageSpeed:有効

次に、WPXキャッシュ:無効、mod_PageSpeed:有効 にして、mod_PageSpeed が有効に機能するまで何度かリロードを行います。

1.抜粋_キャッシュなし-modPageSpeedあり

この結果、SVG と wp-emoji-release.min.js 以外は mod_PageSpeed により圧縮されたため、指摘されなくなりました。
指摘されなかったファイルが実際に圧縮されていることは、ページのソースから該当ファイル名を特定し、GIDZipTest にて確認済みです。

WPXキャッシュ:有効、mod_PageSpeed:有効

上で mod_PageSpeed が有効に機能したことを確認後、WPXキャッシュも有効にして、何度かリロードしてキャッシュさせます。この時点では、PageSpeed Insights の結果は先ほどと同じでした。
その後、
mod_PageSpeed 自体のキャッシュ期限が5分、WPXのキャッシュ期限が30なので、30分以上放置します。
30分放置後に、再度 mod_PageSpeed と WPXキャッシュを機能させるために、何度かリロードします。

mod_PageSpeed と WPXキャッシュが機能すれば、先ほどと同様になるはずですが、、
結果は以下になりました。

2.抜粋_キャッシュあり-modPageSpeedあり-放置後

「圧縮を有効にする」で先ほどは指摘されなかったファイルが増えています。
*.pagespeed.*.css や、*.pagespeed.*.js は、mod_PageSpeed から出力されたファイルです。
GIDZipTest で確認しても、やはり圧縮されていません。
本来は、これらのファイルは mod_PageSpeed にて GZip されているはずです。

ただし、「http://esky.wp-x.jp/」のレスポンスに関しては指摘が無いとおり、GZipで圧縮されています。

※最初に行った、「WPXキャッシュ:無効、mod_PageSpeed:有効」では GZip では圧縮されていました。

本来あるべき姿

ページのレスポンス自体は圧縮されていますが、CSS や JS ファイルについては mod_PageSpeed から出力されているものの、圧縮はされていません。
これは本来、圧縮されているべきものです。

これが、タイトルで「キャッシュ動作の怪」と呼んだ現象です。
前回の記事で、
https://miscblog.estable.jp/post-251/

コンテンツが複雑な場合、または最適化処理に時間がかかるような場合、部分的に最適化したコンテンツを応答してしまうことがございます。
※部分的に最適化したコンテンツを応答した場合、全コンテンツ最適化後のリクエストでキャッシュし直します。

と記載しましたが、これを信じるなら「最適化後のリクエストでキャッシュし直し」されるため、何度かリロードしていれば GZip されるはずです。
う~ん。なんででしょう。

考察

考えられるのは、
・mod_PageSpeed の出力が圧縮されていないか、
・mod_PageSpeed の出力は圧縮されているが、WPXキャッシュを通した時に圧縮が解除されたか
だと思います。

試しに、「WPXキャッシュ:無効、mod_PageSpeed:有効」で圧縮が確認できたあとに、30分放置して、何度かリロードすると、、
圧縮されていました。。。
ということは、「WPXキャッシュを通した時に圧縮が解除された」と思われます。。。

WPXレンタルサーバーのキャッシュシステムは、Varnish Cache であることを示唆する記事がありました。
これとの連携がうまく行っていないのでしょうか?
https://wpmubp.org/wpx-varnish-cache/

これからどうする?

CSS や JS ファイルは画像ファイルと比べるとそれほど大きくないので、レスポンス時間の面からはほとんど差はありません。

とはいっても、「PageSpeed Insights」の評価が下がるのは気持ちの良いものではありませんし、Google の検索結果にも影響を与えるようなので、レスポンス時間に差があまりないのであれば、評価を上げたいところです。

設定などでこの現象が解決できるのか、サーバ側の設定?や対処が必要なのか、もう少し調査してみたいと思います。