ひょんなことから Cloudflare のフリープランを WordPress のサイトへ適用するという作業をお手伝いする機会に恵まれました。
AI クローラーの行儀が悪すぎる
その昔、構築を手伝ったとあるサイトで、昨今、頻繁にサーバーダウンを起こすという相談を受けて、調査したことがきっかけでした。
月に 1 万ページビューにも及ばないサイトなので、VPS の一番安いプランでも、十分に捌ける程度のトラフィックしかないのに、サーバがダウン(正確には http デーモンが応答を返さなくなる。サーバ自身は落ちていなかったようです)を起こすなど…と不審に思いながら、一通り設定と、ログを見てみると… 1 万ページビューにも満たないサイトとは思えない膨大なアクセスログが…
原因は AI クローラーでした。
とにかく、さまざまな AI 系のクローラーが頻繁にアクセスに来るので、まずは robots.txt に以下の記載をして、クローリングは 10 秒に 1 回にしてね…とお願いしてみました。
User-agent: *
Crawl-delay: 10
さほど効果は期待してなかったのですが、お願いをちゃんと聞いてくれるクローラーは、これで多少ましになりました。
いよいよ犯人捜しとなって、主要なクローラーで一番行儀の悪かったのが、某顔本のクローラー。これがひどい。
Apache が 503(Service Temporarily Unavailable) を返そうが、504(Gateway Timeout) を返そうが、お構いなし。しかも、こちらが弱って(過負荷)も、いくつもの IP アドレスからの連続攻撃で袋だたきにしてくれます。
しかし、これも Crawl-delay のお願いは聞いてくれなくても、さすがに Disallow を叩きつけてやると止まりました。
Cloudflare を使ってみた
ひとまず、これでサーバーダウンは起こさなくなったのですが、これは明らかに応急対応で、robots.txt の書き方などを調べてもらうとわかるのですが、これからどんなクローラがまた増えるか予想もつかないので、いたちごっこになりかねません。
そこで CDN(Contents Delivery Network) サービスである Cloudflare を使ってみてはどうか?と提案してみました。無料枠で十分間に合うサイト規模ですし、AI クローラーに限らず、悪さするものはある程度、Cloudflare で退治してくれます。
概要を説明すると即採用! w 言った手前、設定もやってとお願いされて断ることもできず、自分でもやったことのない Cloudflare の設定を以下の記事を見ながらやってみる機会に恵まれ (?) ました。
【スコア改善】お金をかけずにWordPressをCloudflareで高速化する手順 | 🌴 officeの杜 🥥仕組みさえわかっていれば、さほど複雑なことはなく、細かい設定は「Cloudflare WordPress」と検索すると上記のようなドキュメントがいくつも出てきます。しかし、サービスなのでころころインターフェスが変わるようなので、ここでは設定の流れだけ説明します。
1. Cloudflare にサインインして初期設定
Cloudflare にアカウントを作って、CDN を利用するドメインを指定すると、現行の DNS 設定をスキャンしてくれますので、httpd でコンテンツを配信するエントリだけ Proxy する設定にしておきます(メール等のエントリ MX などは DNS Only のままで。自動で設定してくれるので弄る必要はないはずです)。
2. DNS の設定変更
おそらく通常、サーバへの DNS の名前解決は、VPS サービスプロバイダの DNS サービスか、ドメインレジストラの DNS サービスのどちらかを使用していると思いますが、これを Cloudflare の DNS サービスを使用するように設定します。
3. WordPress 側で Cloudflare との連携設定
すでにキャッシュ系のプラグインを導入済みサイトの場合で、そのプラグインが Cloudflare との連携機能を有している場合は、それを有効にします。今回は、Cloudflare と連携できる WP Fastest Cahce が導入済みのサイトでしたので、これに Cloudflare 側で生成した API トークンを設定し連携機能を有効にしました。
4. Cloudflare 側で設定を微調整
今回、設定したサイトは Let’s Encrypt で発行した証明書で HTTPS 化していたので、SSL/TSL の設定でCloudflare とサーバー間の通信は End to End で暗号化を有効にする「フル(厳格)」に設定しました。
またキャッシュルールを設定して、WordPress 管理画面 wp-admin/ 以下の URL はキャシュをバイパスするようにしています。
Cloudflare は無敵!…ではない
これだけ設定すると、早ければ 1 〜 2 時間で効果が現れ始めます( DNS の伝搬速度によります)。top などで負荷を観察していなくても、WordPress 管理画面の反応速度が目に見えて早くなります。
もうこれだけで依頼元は大喜びでした w
結構、頻繁にサーバーダウンを起こしていたようで、WordPress 管理画面の遷移もままならず、記事のアップは、大方、手元のテキストエディタで作ってから、管理画面で微調整してアップするという作業をこれまで続けていたようです。
設定を始めてから 1 時間ちょっとで、効果も半日ほどで体感できるようになり、1 日経てば、サイトの負荷も上がっていないのに、応答時間は上がり、万々歳。。。と今回はこれで丸く収まりましたが、そんな Cloudflare にも弱点がないわけではありません。
1 つは Cloudflare も落ちることがあること。
昨年、何度かあって、主要なサービスにアクセスができなくなって困った経験をした方もいらっしゃるでしょう。当然、Cloudflare が落ちれば、サイトにアクセスできなくなります。まぁ、これはただでサービスを使わせてもらうのですから、致し方がないことですが、ごく希な事故みたいなものなので、今回のように元の安価なサーバーを使う個人サイトに毛が生えた程度のサイトのサービス継続性と比べれば、大きな問題でもないでしょう。
個人的にもう一つ気になったのは、当然、Cloudflare からのアクセスに切り替わると、サーバー側に残るアクセスログが、すべて Cloudflare のキャッシュサーバーからのアクセスとして記録されるため、サーバー側のログに残される IP アドレスからは国の判別くらいしかできなくなることです。
Cloudflare 側にアクセス解析サービスがありますし、これは設定で何とかなるのかもしれませんが、生ログの解析を熱心にしているとか、トラブル時に相手先の IP アドレスを特定する必要に差し迫られなければ、これも大きな問題にはならないでしょう。
そんな気になったことは伝えておきましたが、依頼元は気にしていないようで、効果にも大満足。個人的にもいい経験ができ、○な案件でした。
Connect, protect, and build everywhere