このブログが表示不安定になっていたので、CDNのCloudFlareとWordpressモジュールのWP Super Cacheを使うのをやめてみました。しばらく様子を見つつ、次の対策を考えます。
いやなんていうか、Simple is bestなのかもしれない。
発端は、CloudFlareから来ていた一通のメールです。内容は「HTTP/2とSPDYに対応したぜ」という内容だったわけですが、そういえばSPDYはSSLじゃないと効かなかったけど、HTTP/2になると何か嬉しいのかなぁ・・・と、漠然と読んでいたわけです。
で、ふと気になって、Google Search Consoleを見てみたわけ。何か変わったかなぁと。そしたら、エラー出てた。
・・・そういえば。最近、ブログアップしているときにエラーになることが何度かあったんですが、一時的なものかなぁ、と思っていたんです(※えーと、Softbank Airの回線を疑いたくなるんですよ、こういう場合・・・)。しかし、そうではなく、ブログサーバーへの接続そのものが上手く行っていなかったらしい。
Fetch as Googleで試してみましたが、やはりエラーになる。エラーメッセージを見ると「ERR_INCOMPLETE_CHUNKED_ENCODING」。チャンクサイズとダウンロードされたコンテンツサイズに差異があるためエラーになっているらしい。Chromeの開発者モードで見ると、確かにトップページコンテンツのダウンロードが終わらないように見える場合がある、と。
試しに、Macからcurlでダウンロードしてみると、81920バイトで止まりました。あまりに綺麗な数字で止まったので、この時点で、キャッシュかCDNが被疑です。
まずは、渦中のCloudFlareを「開発者モード」でバイパスさせてみますが、事象変わらず。仕方がないので、DNS設定を変更して、CDNを完全に使わないようにしてみた。そうすると、うまく接続はできるようにはなりました。
ただ、今度はサーバー本体のキャッシュが悪さをしているようで、表示が乱れる状態に。キャッシュクリアしても、モバイルサイトがきちんと表示されない状況が続きました。そこで、思い切って、WP Super Cacheもアンインストールしてみたと。
ここまでやって、やっと、正常な状態に戻りました。良かった。
何がどう悪さをしていたのかは未だに釈然としませんが、いろんなキャッシュを重ねた結果、訳が分からない状態になっていたことは間違いないので、今のシンプルな構成はこれはこれでアリかな、というのが今の感触です。特にCloudFlareはあまり悪い評判も聞かないのですが、ちょっと様子見ようかなあと。
じゃぁこれでアクセラレーションが無くなったのかというと、そうでも無くて、phpのOPCache、apcu、そしてmod_pagespeed(+memcached)が有効なので、実際のところ、アクセスした感触には体感的な差はありません。Page Speed Insightsで見ても、スコアはさほど変わっていないと。ん?つまり、CDNもWP Super Cacheも、そこまで効果無かった、ってことか・・・
種明かしをすると、実はインフラ更新してるんで、これも効いているかと思います。このブログサーバーは、元はCentOS標準のMySQL、PHPで動いていましたが、今はMaria DBにphp 5.6になっていて、すべて個別dockerドメインの構成になっています。個人的には最適構成を煮詰めたつもりなので、これも効いてるかなと(詳しくは別エントリで)。
Webサーバーだけ、今だにApache 2.2を使っています。理由は、CloudFlareが実体はnginxのリバースプロクシだったからなんですが、今回、CloudFlareを外してしまったことで、Webサーバーをnginxに切り替える踏ん切りが付いたかな。ちょっと残念な結果ですが、これはこれで、まぁ良かったのかなとも思っています。
そういえば、mod_pagespeed+memcachedの構成、これ意外に好感触です。Wordpressのキャッシュ系モジュールにも、memcachedを使えるものがあり、過去幾つか試したこともあるのですが、印象はイマイチなものが多かったと。他方、mod_pagespeedは、memcachedを使わせることで、目に見えて動きが良くなった印象があります。この構成はちょっとお勧め。mod_pagespeedをmemcached無しで使うのは勿体無いと思ってます。ただ、unix domain socketで繋がらないのが玉に瑕ですが。
というわけで、CloudFlareとWP Super Cacheでトラブった話でした。やっぱり性能は難しいね。キャッシュは鬼門。Simple is best、と。
コメント